【问题标题】:Determine if UTC Time is in DST for a given Timezone确定给定时区的 UTC 时间是否为 DST
【发布时间】:2011-02-28 16:00:18
【问题描述】:

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

我需要采用 UTC 时间,并将其转换为“目标”时区。但是,日期可能是未来或过去,因此“目标”时区需要根据相应的时区规则为“标准”或“日光”。

所以,我想要这样的东西:

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

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

我应该如何处理这个问题?

【问题讨论】:

    标签: c# timezone


    【解决方案1】:

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

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

    当然,它根本不会跟踪有关 DST 规则的当地政治决策。在美国很常见,例如印第安纳州、亚利桑那州和美洲印第安部落领地的县。

    【讨论】:

    • 我只是用这个答案回答我自己的问题。谢谢,这是正确的。这是一个网络应用程序,所以我涵盖了重新:XP。此外,您至少可以使用以下方法对夏令时进行基本检查:string tz = "Pacific Standard Time" TimeZoneInfo.FindSystemTimeZoneById(tz).IsDaylightSavingsTime(date);
    【解决方案2】:

    根据您掌握的信息,我认为这是不可能的。即使您知道位置,但问题是时区不是与特定国家/地区的 1:1 映射,因此您无法假设它将是哪个时区。

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2013-09-25
        • 2018-03-02
        • 2012-05-09
        • 1970-01-01
        • 2016-08-11
        • 2012-11-30
        • 2017-01-11
        • 2020-11-24
        • 1970-01-01
        相关资源
        最近更新 更多