【问题标题】:DateTime Conversion For Atlantic Standard Time and Atlantic Daylight Time C# TimeZoneInfo大西洋标准时间和大西洋夏令时间的日期时间转换 C# TimeZoneInfo
【发布时间】:2016-07-06 12:19:13
【问题描述】:

我正在使用以下方法将utc datetime转换为其他时区对应的datetime

public string ConvertUTCDateTimetoUserDateTime(string utcDate)
{
    DateTime userDateTime = new DateTime();
    String displaydate = String.Empty;
    try
    {
        destinationTimeZone = TimeZoneInfo.FindSystemTimeZoneById(TIMEZONE_ID);
        DateTime returndt = Convert.ToDateTime(utcDate);
        string strDate = String.Format("{0:" + DATE_FORMAT + " " + "HH:mm}", returndt);
        sourceTimeZone = TimeZoneInfo.Utc;
        string dateFormat = DATE_FORMAT + " " + "HH:mm";
        DateTime unspecified = DateTime.ParseExact(strDate, dateFormat, CultureInfo.InvariantCulture);
        userDateTime = TimeZoneInfo.ConvertTime(unspecified, sourceTimeZone, destinationTimeZone);
        displaydate = userDateTime.ToString(DATE_FORMAT + " HH:mm");
    }
    catch (Exception ex)
    {
    }
    return displaydate;
}

如果我将 '03/19/2016 18:48' 作为 UTC 日期和时区作为“大西洋标准时间”(UTC-4:00),那么它会将其转换为 '03/19/2016 15:48'这是大西洋夏令时(UTC-3:00)。为什么要考虑大西洋标准时间的 DST?并非大西洋时间的所有地方都考虑 DST。对于东部标准时间 (UTC-5:00) 和太平洋标准时间 (UTC-8:00),DST 的转换是正确的。但是为什么在大西洋时间的情况下会发生这种情况。对于大西洋夏令时间也没有 TimeZone ID。我可以通过检查它是否是 AST 来增加一小时,但是有没有更好的方法来处理 AST 和 ADT?

【问题讨论】:

    标签: c# datetime timezone


    【解决方案1】:

    来自the timezone tag wiki

    标识符和名称是混乱的,并且是随意分配的。多年来,命名约定发生了变化,几乎没有一致性。通常,不要依赖 Windows 时区标识符来表示任何特殊含义。相反,请根据显示名称选择时区。

    几个例子:

    • “东部标准时间”是指美国东部标准时间和美国东部时间。

      ...

    同样适用于大西洋时间。 "Atlantic Standard Time" 条目的显示名称为 "(UTC-04:00) Atlantic Time (Canada)",适用于 AST 和 ADT。它适用于加拿大地区,例如哈利法克斯、格莱斯湾、鹅湾和蒙克托。它也适用于图勒空军基地(格陵兰)和百慕大。

    大西洋时间没有有夏令时的位置应该使用"SA Western Standard Time" 条目。它的显示名称为"(UTC-04:00) Georgetown, La Paz, Manaus, San Juan",这确实令人困惑,因为只有圣胡安实际上将此区域称为“大西洋”。其他的有各种当地名称和缩写。

    详情请见this page。如果您有具体的位置,请告诉我,我会相应更新。

    另外 - 你的代码有点乱。它过于依赖字符串格式和解析方式,正在吞噬异常,并且依赖于函数外部的外部变量。我建议你把它清理干净。

    【讨论】:

      猜你喜欢
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      • 2017-08-28
      • 2018-09-15
      • 2010-10-13
      • 2014-05-26
      • 2015-11-29
      • 2011-03-13
      相关资源
      最近更新 更多