[Boost]如何将UNIX风格时间转换为标准格式
2008-01-03 20:21
686 查看
一个小技巧,权当对Great Boost的致敬。
如何将UNIX风格时间转换为标准格式
UNIX风格的时间单位一般会是这样:YYMMDD,比如说“0308011644”。 但是,实际上MFC的COleDateTime类不支持这种格式,而且COleDateTime的背后使用的VarDateFromStr也一样不支持。实际上,VarDateFromStr只会支持这样的近似UNIX格式:03 08 01 16:44 所以我们必须转换UNIX风格为近似UNIX风格,也就是说:从“0308011644”到“03 08 01 16:44”。然后,让VarDateFromStr&VarBstrFromDate把它转换为“2003-8-1 16:44:00”。 首先,批分“0308011644”,我们还是可以用boost:tokenizer,和批分电话号码不一样的是,这里需要按照数字的位数分割,所以要用到:int offsets[] = {2,2,2};boost::offset_separator f(offsets, offsets+3); 上面的分隔符告诉tokenizer,按照2,2,2的方式分割,我们用这么一行代码来实现它:boost::tokenizer tok1(s,f); 代码如下,利用到了boost:tokenizer技术和VarDateFromStr&VarBstrFromDate技术:////////////////////////////////////////////////////////////// STL&BOOST 头文件:#pragma warning(disable:4786)#include #include //////////////////////////////////////////////////////////// /*******************************************************// 函 数 名 : ParseUNIXDateTime // 所属类名 : CProcessorThread // 函数功能 : 解析UNIX风格的时间单位"0308011644" 出来的结果是"2003-8-1 16:44:00" // 处理过程 : // 备 注 : // 作 者 : 郑昀 // 时 间 : 2003年8月11日 // 返 回 值 : _bstr_t // 参数说明 : _bstr_t &bstrUNIXDateTime *******************************************************/_bstr_t CProcessorThread::ParseUNIXDateTime(_bstr_t &bstrUNIXDateTime){ ////////////////////////////////// // 特殊手段 // 为了纠正传入的UNIX风格时间"0308011644" // 引入boost:tokenizer,最终转换为"03 08 01 16:44" _bstr_t bstrDoneDateTime(""); { //////////////////////////////////////////////////////////////////// std::string s(bstrUNIXDateTime); int offsets[] = {2,2,2}; boost::offset_separator f(offsets, offsets+3); boost::tokenizer tok1(s,f); int nIndex = 0; boost::tokenizer::const_iterator itBegin = tok1.begin(); boost::tokenizer::const_iterator itEnd = tok1.end(); boost::tokenizer::iterator beg; // 前面按照我们给的方式分割好了时间单位,这里循环: for(beg = tok1.begin(); / beg != itEnd; / ++beg, ++nIndex) { bstrDoneDateTime += _bstr_t((*beg).c_str()); // 按照年,月,日,时,分的顺序,事先排列好 switch(nIndex) { case 0:// 03 case 1:// 08 case 2:// 01 bstrDoneDateTime += _bstr_t(" "); break; case 3:// 16 bstrDoneDateTime += _bstr_t(":"); break; default: break; } }; // 最后结果,时间从"0308011644"转换为"03 08 01 16:44"了 //////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// // // 既然已经转换为了"03 08 01 16:44",我们还需要进一步转换为标准时间"2003-8-1 16:44:00" // if(bstrDoneDateTime.length() > 0) { double dDateNew = 0.0; LCID lcid; lcid = GetSystemDefaultLCID(); HRESULT hr = VarDateFromStr(bstrDoneDateTime, lcid, LOCALE_NOUSEROVERRIDE, &dDateNew); BSTR bstrOut = NULL; VarBstrFromDate(dDateNew, lcid, LOCALE_NOUSEROVERRIDE, &bstrOut); bstrDoneDateTime = _bstr_t(bstrOut, false); } } ////////////////////////////////// return bstrDoneDateTime;} |
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=12726
相关文章推荐
- [Boost]如何将UNIX风格时间转换为标准格式
- [Boost]如何将UNIX风格时间转换为标准格式
- [Boost]如何将UNIX风格时间转换为标准格式
- [Boost]如何将UNIX风格时间转换为标准格式
- [Boost]如何将UNIX风格时间转换为标准格式
- [Boost]如何将UNIX风格时间转换为标准格式
- [转载][Boost]如何将UNIX风格时间转换为标准格式
- [Boost]如何将UNIX风格时间转换为标准格式
- 如何把sql中以浮点形式存储的时间转换成标准格式
- php将标准字符串格式时间转换成unix时间戳_strtotime
- php将标准字符串格式时间转换成unix时间戳_strtotime
- unix/linux 时间戳转换为标准时间格式
- linux下如何把时间转成秒数,或把秒数转换成标准时间格式
- 如何用date将时间戳转换为时间格式
- 在JS中如何把毫秒转换成规定的日期时间格式实例
- Excel将秒转换成标准的时间格式HH:MM:SS
- linux下如何把时间转成秒数,或把秒数转换成标准时间格式
- 将中国标准时间转换成标准格式的代码
- jQuery时间验证和转换为标准格式的时间格式
- mysql日期函数From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT(后者只能格式化标准日期格式,时间戳的不行)