如何将C++提升posix_time :: ptime的分辨率更改为毫秒?

yao*_*bin 6 c++ boost resolution datetime-format

我正在尝试以"YYYY-MM-DD hh:mm:ss.fff"的格式打印boost :: posix_time :: ptime,其中MM是2位数月份,fff是3位数毫秒.一个例子是:2011 - 07 -14 22点38分四十秒.123.

我正在使用Boost 1.33.1.

我试图调用API"ptime :: to_simple_string()",但它不符合我的需要:此方法以"YYYY-MMM-DD hh:mm:ss.ffffff"格式打印ptime,其中"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;
Run Code Online (Sandbox Code Playgroud)

但我得到了像"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).因此,我将Mark的建议(见下文)在将微秒分辨率ptime转换为字符串后删除最后3个字符.

Mar*_*som 5

简单实用的解决方案是使用%f并始终从结果中删除最后3个字符.