我试图在“YYYY-MM-DD hh:mm:ss.fff”格式中打印一个boost :: posix_time :: ptime,其中MM是一个2位数的月份,并且是一个3位数毫秒。一个例子是:2011- -14 22:38:40。 。我正在使用Boost 1.33.1。如何将C++ boost posix_time :: ptime的分辨率更改为毫秒?
我试图调用API “的ptime :: to_simple_string()”,但它不符合我的需要:这种方法打印的ptime在“YYYY-MMM-DD HH的格式:MM:SS。 ffffff“,其中”MMM“是3个字符的月份名称,如”Jan“,”ffffff“是6位微秒。这不是我想要的。
我又试图使用time_facet件事:
ptime my_time(second_clock::local_time());
time_facet<ptime, char> * my_time_facet = new time_facet<ptime, char>();
std::cout.imbue(std::locale(std::locale::classic(), my_time_facet));
std::cout << my_time;
但我得到了像输出 “2011-07-14 22:38:40.123000”。这也不是我想要的。
看起来ptime默认使用微秒作为时间分辨率。但是我只需要一毫秒的分辨率。经过一番研究我认为可以有两种方法来解决这个问题:
1)。不知何故,我可以将ptime的时间分辨率更改为毫秒。我发现了一些与时间分辨率相关的enumation和模板类,但我不知道如何使用它们。 2)。不知何故,我可以改变我的时间刻面格式来打印出毫秒。但官方文件似乎说“%F”和“%f”都使用微秒分辨率。
我倾向于首选解决方案,但我需要帮助!我怎样才能得到我想要的格式的ptime字符串?
PS:
1)。虽然我试图在这个网站上搜索类似的问题,但我没有找到一个。如果你知道,请告诉我。 2)。 Boost 1.33.1 Date Time文档(http://www.boost.org/doc/libs/1_33_1/doc/html/date_time.html)是我一直在阅读的唯一参考资料。在2011年7月15日
更新:
一些进一步的研究之后,我的结论是:
1)。可以将时间分辨率更改为毫秒,因此使用time_facet中的“%f”将仅显示毫秒而不显示默认微秒。但是,您似乎需要定义一整套自己的类,包括your_time_res_traits,your_time_duration,your_time_system_config,your_time_system和your_time。这对我的问题来说绝对是太复杂了。 2)。因此,我将马克的建议(见下文)在将微秒级分辨率ptime转换为字符串之后去掉最后3个字符。
出于好奇,你为什么用了近6岁的版本的Boost? – ildjarn
@ildjarn:哦,因为1.33.1版本已经在我手中,所以我现在不想打扰升级到最新版本。这提醒了我:在最新的Boost中有没有一个很好的解决方案来解决我的问题?嗯..我会去看看文档.. – yaobin
当前版本的Boost.DateTime默认情况下的微秒分辨率,这应该超过您的需求。但是真的,在C++术语中,6年是**古代** - 升级。 – ildjarn