用时间戳格式化亚秒精度时间
Boost - Formatting sub second precision time with a time stamp
我需要得到一个精确到毫秒的格式化时间戳(稍作修改的ISO 8601)。
示例日期看起来像这样:2011-09-28 13:11:15.237-08:00
格式也应该能够被覆盖。
我一直在玩boost::posix_time::microsec_clock::local_time()
和boost::posix_time::time_facet
,它工作得很好,除了时间戳。
由于posix time不包含时区信息,这是不可能的(我猜)
那么,还有什么我可以使用的,具有毫秒精度,包含时区信息,或者我可以使time_facet
工作与时区?
也许我应该一直使用UTC?
谢谢
看一下boost::local_time::local_date_time类。您可以指定一个时区,并使用本地微秒时钟对其进行初始化,如
boost::local_time::local_date_time my_ldt(boost::local_time::local_microsec_clock::local_time(new boost::local_time::posix_time_zone("EST-5EDT,M4.1.0,M10.5.0")));
你应该可以使用facet来格式化为字符串。
编辑:完整示例:
#include <iostream>
#include <iomanip>
#include <string>
#include <sstream>
#include <boost/date_time/local_time/local_time.hpp>
int main(void)
{
boost::posix_time::ptime now = boost::posix_time::second_clock::local_time();
boost::posix_time::ptime utc = boost::posix_time::second_clock::universal_time();
boost::posix_time::time_duration tz_offset = (now - utc);
std::stringstream ss;
boost::local_time::local_time_facet* output_facet = new boost::local_time::local_time_facet();
ss.imbue(std::locale(std::locale::classic(), output_facet));
output_facet->format("%H:%M:%S");
ss.str("");
ss << tz_offset;
boost::local_time::time_zone_ptr zone(new boost::local_time::posix_time_zone(ss.str().c_str()));
boost::local_time::local_date_time ldt = boost::local_time::local_microsec_clock::local_time(zone);
boost::local_time::local_time_facet* output_facet = new boost::local_time::local_time_facet();
ss.imbue(std::locale(std::locale::classic(), output_facet));
output_facet->format("%Y-%m-%d %H:%M:%S%f%Q");
ss.str("");
ss << ldt;
std::cout << ss.str() << std::endl; // "2004-02-29 12:34:56.000789-05:00"
std::cout << "Press return to exit" << std::endl;
std::string wait_for_line;
std::getline(std::cin, wait_for_line);
return (0);
}
相关文章:
- 提升,以分钟精度获得 UTC 时间
- GLUT 无法获得米利斯精度的时间
- 使用C++中的put_time以毫秒精度获取当前时间
- 以毫秒级精度对日期和时间进行操作
- 以小于一毫秒的精度计算时间的功能
- 执行时间:与Java BigInteger相比,提高了多精度
- 如何在双精度内存储时间
- 将当前时间 simTime.dbl() 与以前存储的双精度值进行比较并不总是给出正确的答案......为什么?
- 有没有办法在Windows上测量时间到微秒的精度
- 以微秒精度获取时间点
- c++11以微秒精度获取当前时间
- QT以微秒精度解析日期的时间戳
- 如何获得高分辨率时间戳作为双精度
- 在C++中可移植精度良好的双时间戳
- 用时间戳格式化亚秒精度时间
- 如何在当前时间的打印输出中获得更高的精度(几分之一秒)
- 在Qt中获得毫秒精度的当前时间
- c++和Sqlite3:如何以毫秒精度存储日期/时间
- 如何获得比Windows XP上的计时器滴答(15毫秒)更高精度的时间
- 与PostgreSQL一起工作时,SOCI库中的高精度时间戳