确定给定时区的UTC时间是否在DST中

时间:2011-02-28 16:00:19

标签: c# timezone

我有时间,在UTC。我还有一个“房间”分配,其中有部分时区信息(它有一个位置,所以我知道它是东方,太平洋等)。

我需要花费UTC时间,并将其转换为“目标”时区。但是,日期可能是将来还是过去,因此根据适当的时区规则,“目标”时区需要为“标准”或“日光”。

所以,我想要这样的事情:

TimeZoneInfo.ConvertTimeFromUtc(UTCDateTime, TimeZoneInfo.FindSystemTimeZoneById(tz));

但我不知道如何获得“tz”,因为我所知道的是(例如)PST PDT值,我不知道哪一个。

我该如何处理?

3 个答案:

答案 0 :(得分:1)

您始终传递标准(启用非夏令时)时区的名称。在您的情况下,这是“太平洋标准时间”。

要查找这些名称,请使用Regedit.exe查看计算机的注册表。导航到HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones。请注意,此列表仅对Windows Vista及以上版本可信,但您的代码不适用于早期版本(2000和XP)。缺少的一个功能是有关夏令时规则的先前更改的历史信息。 “Dynamic DST”子项。该计算机还必须启用Windows Update才能接收这些规则的更新。

当然,它并没有跟踪当地关于DST规则的政治决定。在美国很常见,例如印第安纳州,亚利桑那州和美洲印第安人部落地区的县。

答案 1 :(得分:0)

我认为根据您提供的信息,我认为不可能。即使您知道问题的位置,时区也不是1:1映射到特定国家/地区,因此您不能假设它将成为哪个时区。

有一些网络服务允许您根据城市/邮政编码和其他信息查询时区信息,这可能是您唯一的选择。

答案 2 :(得分:0)

由于您已经知道区域并且您在TimeZoneInfo对象中有UTC时间,因此在转换后,应用IsDaylightSavingTime(UTCDateTime)方法来确定标准时间或夏令时是否适用于您当地时间。

如果您想要适当的本地时间名称(例如PST或PDT),您可以从StandardName和DaylightName属性中获取它们。

Microsoft在线文档中有一些关于模糊时间和Windows XP平台行为的警告。