【发布时间】:2016-08-07 18:19:08
【问题描述】:
假设我的 Windows 服务器应用程序在东部时区 (NY) 运行。
我将每个日期时间事件(它们发生的那一刻)转换并存储在 UTC 中,以便连接到服务器的任何客户端应用程序读取事件的 UTC 时间并将其转换并显示在客户端自己的 TZ 中。
但这是棘手的部分,一些事件报告它们在另一个州的时间的时间戳并且没有明确指定夏令时信息(例如 xx:xx:xx AM PT,意思是太平洋时间,但我不知道它当前是否在夏令时)。
服务器可以检查它是否处于夏令时,但那将是服务器自己的 TZ(即东部时间)。我能想到的最好办法是阅读服务器的本地夏令时信息并将其用于 PT,但我知道这不是 100% 准确的。尤其是当 ET 刚刚开始(或停止)使用夏令时并且 PT 仍有数小时的时间时,通过短窗口。
现在我的问题是,无论服务器应用程序位于哪个时区,有没有办法(在 Windows API 中)准确地找出另一个时区的夏令时状态?
编辑: 好的,如何从以东部时间运行的 Windows 机器将其转换为 UTC“2016 年 3 月 13 日星期日 1:15 AM PT”? (请注意,当正在运行的机器(在 ET 中)目前处于 DST 中并且要转换的日期/时间在 DST 中还不是刚刚时,特别选择了这个日期/时间。我已经涵盖了 UTC 转换但无法确定给定的日期/时间是否在 DST 中。
【问题讨论】:
-
this previous question 有帮助吗?
-
如何识别应用程序中的时区?如果像
PT这样的缩写是你所拥有的,你可能会觉得非常困难或不可能。这些输入是否仅限于某些固定值?或者他们真的可以是什么? -
@MattJohnson 它们通常是 HTTP 标准日期/时间字符串(实际上包含 DST 信息,如 xx:xx:xx AM PST 或 PDT,如果 DST 处于活动状态)但有些服务器对提供 DST 信息,只需说它是 PT(太平洋时间),然后让您确定 PT 在给定的日期/时间是否处于 DST 中。系统 (Windows) 应该知道这一点,因为它会在 3 月和 11 月的第 2 和第 1 个星期日调整系统时钟,并可以通过 API 向用户提供这一点。
-
更糟糕的是,夏令时的开始和结束日期/时间因国家/地区而异(哎呀,甚至美国的某些州也有不同的观察方式,夏威夷和亚利桑那州没有夏令时)。因此,应用程序要确定给定的日期/时间是否在 DST 中将是一项非常艰巨的工作,但底层操作系统很容易向应用程序提供此信息,因为它们已经具有内置数据库适用于每个国家和时区。
-
是的,我对时区了如指掌。检查我的个人资料。 ;)。我要问的是,对于 your 应用,是否有一致的输入形式?您是否专门使用 RFC822/2822 样式的输入字符串及其允许的有限时区缩写集?或者这是任意随机输入?请注意,
PST和PDT是该规范的一部分(用于 http 标头),但PT不是。请准确。谢谢。
标签: c datetime winapi timezone dst