我试图用来std::chrono
制造一个std::string
但遇到问题。
这是我想模仿的C(-ish)代码:
std::uint32_t time_date_stamp = 1484693089; char date[100]; struct tm *t = gmtime(reinterpret_cast(&time_date_stamp)); strftime(date, sizeof(date), "%Y-%m-%d %I:%M:%S %p", t);
我的出发点始终是这个std::uint32_t
,它来自我无法控制的数据格式。
抱歉,我没有任何C ++作为起点,甚至不知道如何std::chrono::time_point
正确编写C ++ 。
这是一种简单的方法,无需tm
使用此便携式C ++ 11/14免费,开源,仅标头库即可使用C语言。
#include "date.h" #include#include int main() { std::uint32_t time_date_stamp = 1484693089; date::sys_seconds tp{std::chrono::seconds{time_date_stamp}}; std::string s = date::format("%Y-%m-%d %I:%M:%S %p", tp); std::cout << s << '\n'; }
输出:
2017-01-17 10:44:49 PM
这没有与古代gmtime
C函数相关的线程安全问题。
date::sys_seconds
上面是typedef
对std::chrono::time_point
。