【问题标题】:How to get the current time in UTC?如何获取UTC的当前时间?
【发布时间】:2018-06-05 15:30:35
【问题描述】:

我正在尝试在 UWP 应用程序中以 UTC 格式获取当前时间。这应该是构造DateTime对象的简单问题

DateTime const now{ clock::now() };

并访问其UniversalTime 字段。但是,该字段似乎没有投影到 C++/WinRT 中。

如何使用 C++/WinRT 以 UTC 格式获取当前时间?

【问题讨论】:

  • 作为参考,从此问题链接到的文档已更新:“在 C++/WinRT 中,此字段不存在,因为在该语言中,投影 DateTime 是std::chrono::time_point。”

标签: windows-runtime c++-winrt


【解决方案1】:

看起来像一个文档错误。该字段在 C++/WinRT 中不存在。相反,DateTime 被投影为std::chrono::time_point。但与 C++/CX 类似,结构(不是字段)的文档仍然有些准确 - 它与 FILETIME 具有相同的粒度。但是比自己提取值更容易,winrt::clock 提供了静态方法 to_file_time 和 to_time_t 将 DateTime 转换为 FILETIME 或time_t。

我会整理好文档,我一直想写一篇关于 C++/WinRT 如何与 std::chrono 无缝互操作以进行计时的博文。我是 std::chrono 的粉丝,将它整合到 C++/WinRT 是我的想法,所以讨厌的人知道该怪谁。 :)

【讨论】:

  • 仅供参考,chrono 期待 C++20 在日历和时区方面的重大改进。
  • 谢谢你提醒我,霍华德。我真的很期待这些改进。 C++/WinRT 将专门化clock_time_conversion,只要它可以在time_points 之间转换为DateTime 和utc_clock/system_clock。我已经提到我是计时码表的忠实粉丝和拥护者,对吧? :)
  • 如果您需要任何chrono/date/time 帮助,您知道在哪里可以找到我(我很容易用谷歌搜索)。 :-)
  • 感谢您澄清文档问题。如果我理解正确,没有直接的方法可以直接在 UTC 中获得 DateTime(或 std::chrono::time_point),而无需通过 C API,通过转换为 FILETIME 或使用 <ctime>。这可能是 的原因,我从来没有像你一样喜欢 std::chrono。尽管当 Howard Hinnant 的扩展被合并到 C++ 中时,这肯定会改变,最终使 std::chrono 普遍有用。
猜你喜欢
  • 1970-01-01
  • 2011-03-20
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2011-11-26
  • 2012-07-24
  • 2013-09-29
  • 1970-01-01
相关资源
最近更新 更多