在C++11中,获取字符串形式的日期和时间的最新方法是什么?
我知道std::put_time
,但是参考资料说我只能在流中使用它。
有一个std::chrono::system_clock
,它提供了to_time_t
,返回的时间是time_t
,缺少日期,不是吗?
我可以使用像bames53这样的字符串流:Outputting Date and Time in C++ using std::chrono,但这似乎是一个变通方法。
在C++11中,获取字符串形式的日期和时间的最新方法是什么?
我知道std::put_time
,但是参考资料说我只能在流中使用它。
有一个std::chrono::system_clock
,它提供了to_time_t
,返回的时间是time_t
,缺少日期,不是吗?
我可以使用像bames53这样的字符串流:Outputting Date and Time in C++ using std::chrono,但这似乎是一个变通方法。
5条答案
按热度按时间nhhxz33t1#
使用Howard Hinnant's free, open-source header-only datetime library,您可以在一行代码中获得当前UTC时间作为
std::string
:字符串
我刚刚运行了这个,字符串包含:
型
是的,它甚至可以提供完整的精确度。如果你不喜欢这种格式,所有的
strftime
标志都可用。如果你想要你的本地时间,也有一个timezone library可用,虽然它不是头只。型
输出量:
型
C++20更新
现在可以使用std::lib头文件
<chrono>
和<format>
来完成:型
Demo的函数。
mo49yndu2#
更简单:
字符串
也要根据时间适当调整格式。
请注意,我怀疑这对于多线程代码不太适用,因为
std::localtime()
返回一个指向内部结构体的指针。odopli943#
首先,
std::time_t
确实捕获日期和时间,因为它通常表示从1970年1月1日开始的秒数。在C++11中没有对处理日期的支持。如果你不想这样做,你仍然必须依赖于boost,主要是手动。下面介绍如何手动执行此操作。
您可以以线程安全的方式将它与任何
std::chrono::*clock
(如std::system_clock
)一起使用,如下所示:字符串
在其他地方,您可以发布:
型
这个解决方案相对好的一点是,在API级别,你仍然使用现代的、可移植的C++概念,比如
std::chrono::time_point
,当然还有std::string
。41ik7eoe4#
像这样的时间戳;
字符串
以类似的方式约会。
laawzig25#
您可以使用下面给出的代码片段,因为它将服务于您的目的。这里使用time.h头文件作为所需的**localtime()函数,然后使用带有所需参数的strftime()**函数将给予输出,并将其作为字符串返回。
字符串