如何在 C 中构建 ISO 8601 日期时间?

新手上路,请多包涵

我正在使用 Azure REST API,他们正在使用它来创建表存储的请求正文:

 DateTime.UtcNow.ToString("o")

产生:

2012-03-02T04:07:34.0218628Z

它被称为“往返”,显然它是一个 ISO 标准(参见 http://en.wikipedia.org/wiki/ISO_8601 ),但我不知道如何在阅读 wiki 文章后复制它。

有谁知道 Boost 是否支持这个,或者可能是 Qt

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

阅读 728
2 个回答

如果精确到秒的时间足够精确,可以使用 strftime

 #include <ctime>
#include <iostream>

int main() {
    time_t now;
    time(&now);
    char buf[sizeof "2011-10-08T07:07:09Z"];
    strftime(buf, sizeof buf, "%FT%TZ", gmtime(&now));
    // this will work too, if your compiler doesn't support %F or %T:
    //strftime(buf, sizeof buf, "%Y-%m-%dT%H:%M:%SZ", gmtime(&now));
    std::cout << buf << "\n";
}

如果您需要更高的精度,可以使用 Boost:

 #include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>

int main() {
    using namespace boost::posix_time;
    ptime t = microsec_clock::universal_time();
    std::cout << to_iso_extended_string(t) << "Z\n";
}

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

使用 C++20,时间点格式(到字符串)在 (chrono) 标准库中可用。 https://en.cppreference.com/w/cpp/chrono/system_clock/formatter

 #include <chrono>
#include <format>
#include <iostream>

int main()
{
   const auto now = std::chrono::system_clock::now();
   std::cout << std::format("{:%FT%TZ}", now) << '\n';
}

输出

2021-11-02T15:12:46.0173346Z

它适用于具有最新 C++ 语言版本 (/std:c++latest) 的 Visual Studio 2019。

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

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