gpt4 book ai didi

c++ - 使用 std::chrono 在 C++ 中输出日期和时间

转载 作者:IT老高 更新时间:2023-10-28 13:23:40 26 4
gpt4 key购买 nike

我一直在升级一些旧代码,并在可能的情况下尝试更新到 c++11。以下代码是我用来在程序中显示时间和日期的方式

#include <iostream>
#include <string>
#include <stdio.h>
#include <time.h>

const std::string return_current_time_and_date() const
{
time_t now = time(0);
struct tm tstruct;
char buf[80];
tstruct = *localtime(&now);
strftime(buf, sizeof(buf), "%Y-%m-%d %X", &tstruct);
return buf;
}

我想使用 std::chrono(或类似的)以类似的格式输出当前时间和日期,但我不确定如何去做。任何帮助将不胜感激。谢谢

最佳答案

<chrono>库只处理时间而不是日期,system_clock 除外。它能够将其时间点转换为 time_t .所以使用 <chrono>因为日期不会有太大改善。希望我们得到像 chrono::date 这样的东西在不久的将来。

也就是说,您可以使用 <chrono>通过以下方式:

#include <chrono>  // chrono::system_clock
#include <ctime> // localtime
#include <sstream> // stringstream
#include <iomanip> // put_time
#include <string> // string

std::string return_current_time_and_date()
{
auto now = std::chrono::system_clock::now();
auto in_time_t = std::chrono::system_clock::to_time_t(now);

std::stringstream ss;
ss << std::put_time(std::localtime(&in_time_t), "%Y-%m-%d %X");
return ss.str();
}

请注意 std::localtime可能会导致数据竞争。 localtime_r或类似功能可能在您的平台上可用。

更新:

使用新版本的 Howard Hinnant 的 date library你可以写:

#include "date.h"
#include <chrono>
#include <string>
#include <sstream>

std::string return_current_time_and_date() {
auto now = std::chrono::system_clock::now();
auto today = date::floor<days>(now);

std::stringstream ss;
ss << today << ' ' << date::make_time(now - today) << " UTC";
return ss.str();
}

这将打印出类似“2015-07-24 05:15:34.043473124 UTC”的内容。


在不相关的注释上,返回 const对象在 C++11 中变得不受欢迎; const 返回值不能被移出。我还删除了尾随 const,因为尾随 const 仅对成员函数有效,并且此函数不需要成为成员。

关于c++ - 使用 std::chrono 在 C++ 中输出日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17223096/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com