windows - 有什么办法可以得到 future 点的 UTC 时间转换?

标签 windows winapi

在 Windows 中,我可以通过调用 GetTimeZoneInformation 轻松地进行 UTC 转换。结果我返回的结构将有两个不同的偏置值,一个用于标准时间,一个用于 DST,还有一个 BiasCode 表示我们当前使用的是哪个。如果我们只关心当前时刻就好了。

但是我有一个 API,用户可以调用它来检索有关即将发生的事件的数据。数据以本地时间存储在数据库中,用户需要 UTC 时间,所以我运行转换,一切都很好......除了我们将在几周内更改时间。如果我用今天的偏差报告时间变化的另一边的事件,它们将偏离一个小时。

有什么我可以调用的,它像 GetTimeZoneInformation 一样工作,只是我给它传递了一个日期和时间,然后它给我的 BiasCode 是 < em>到时候会是正确的, 而不是现在的? (是的,我知道规则每年都在变化。我不是在寻找 future 几周之后的任何东西。)

最佳答案

SystemTimeToTzSpecificLocalTime - 让我引用 MSDN -

Converts a time in Coordinated Universal Time (UTC) to a specified time zone's corresponding local time.

您可以提供过去和 future 的输入 UTC 时间,并在考虑特定时刻有关 DST 设置的所有详细信息的情况下进行本地时间转换。

TzSpecificLocalTimeToSystemTime 是进行反向转换的孪生函数。

对我来说更重要的问题是 DST 设置会不时更改,即使对于同一地区也是如此,并且转换可能每年都不同(当然,这主要影响过去的事件,而不是 future 的事件).我假设此 API 也会处理此问题,跟踪 DST 规则随时间变化的历史记录。

更新。这个假设是正确的,MSDN 提到:

  • The time zone uses a different UTC offset for the old and new years.
  • The UTC time to be converted and the calculated local time are in different years.

关于windows - 有什么办法可以得到 future 点的 UTC 时间转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12323495/

相关文章:

python - 在另一个驱动器上创建 virtualenv - 访问被拒绝

c++ - 将 32 位地址的类型转换为 (BYTE *) 和 (DWORD *) 有什么区别

windows - 如何知道 80000003 断点后面是否隐藏了不同的异常(WER 对话框)

c++ - Windows RT on ARM native 代码调用约定是什么?

c# - MonoDevelop 2.4.1 未在 Windows 7 上运行最终无法加载 glibsharpglue-2

c# - 如何从网络共享在 C# 中实现高性能文件复制方法?

c++ - 通过c++ WinAPI计算MD5哈希值

winapi - Win32 在父窗口中捕获子窗口消息

c++ - 隐藏窗口的PrintWindow和BitBlt

c++ - win32 中是否有任何其他控件,如 ListView,或者是否有任何方法可以删除 win32 中可用的 ListView 控件的标题区域