C 11 获取当前日期和时间作为字符串

新手上路,请多包涵

在 c++11 中以字符串形式获取日期和时间的最先进方法是什么?

我知道 std::put_time ,但参考资料说我只会在流中使用它。

std::chrono::system_clock 提供 to_time_t 将时间返回为 time_t 并且缺少日期,不是吗?

我可以使用像 bames53: Outputting Date and Time in C++ using std:: chrono 这样的字符串流,但这似乎是一种解决方法。

原文由 kiigass 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.3k
2 个回答

使用 Howard Hinnant 的免费、开源的仅标头日期时间库,您可以在一行代码中以 std::string 的形式获取当前 UTC 时间:

 std::string s = date::format("%F %T", std::chrono::system_clock::now());

我刚刚运行了这个,字符串包含:

 2017-03-30 17:05:13.400455

没错,它甚至可以为您提供完整的精度。如果您不喜欢该格式,所有 strftime 格式标志都可用。如果您想要本地时间,也可以使用 时区库,尽管它不仅仅是标题。

 std::string s = date::format("%F %T %Z", date::make_zoned(date::current_zone(),
                                         std::chrono::system_clock::now()));

输出:

 2017-03-30 13:05:13.400455 EDT

原文由 Howard Hinnant 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 std::chrono 的更简单的解决方案:

 #include <chrono>

using sysclock_t = std::chrono::system_clock;

std::string CurrentDate()
{
    std::time_t now = sysclock_t::to_time_t(sysclock_t::now());

    char buf[16] = { 0 };
    std::strftime(buf, sizeof(buf), "%Y-%m-%d", std::localtime(&now));

    return std::string(buf);
}

记住也要根据时间调整格式。

但是请注意,我怀疑这不适用于多线程代码,因为 std::localtime() 返回一个指向内部结构的指针。

原文由 Timmmm 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题