繁体   English   中英

C# 处理夏令时转换

[英]C# Handling Daylight Saving in Time Conversion

我有一个日期字符串2020-11-26T14:24:29-08:00传递给后端 ASP NET MVC 应用程序。

我正在使用以下代码解析日期/时间字符串:

    DateTime dateTime = DateTimeOffset.ParseExact("2020-11-26T14:24:29-08:00", 
                                                  "yyyy'-'MM'-'dd'T'HH':'mm':'sszzz",
                                                  CultureInfo.InvariantCulture).DateTime;

这段代码给了我比实际时间少 1 小时的时间。 这是因为夏令时。

现在,我想知道夏令时是否在时区有效。 所以我写了下面的代码:

var offset = DateTimeOffset.ParseExact("2020-11-26T14:24:29-08:00", 
                                       "yyyy'-'MM'-'dd'T'HH':'mm':'sszzz", 
                                       CultureInfo.InvariantCulture);

TimeZoneInfo zone = null;
foreach (TimeZoneInfo z in TimeZoneInfo.GetSystemTimeZones())
{
    if(zone.BaseUtcOffset == offset.Offset)
            zone = z;                        // this runs multiple times   
}

上面的代码if条件多次命中,并且以下区域满足条件。

  • 育空标准时间
  • 太平洋标准时间(墨西哥)
  • UTC-08
  • 太平洋标准时间

所以,我进一步缩小了代码范围

var offset = DateTimeOffset.ParseExact("2020-11-26T14:24:29-08:00", 
                                       "yyyy'-'MM'-'dd'T'HH':'mm':'sszzz", 
                                       CultureInfo.InvariantCulture);

TimeZoneInfo zone = null;
foreach (TimeZoneInfo z in TimeZoneInfo.GetSystemTimeZones())
{
    if(zone.BaseUtcOffset == offset.Offset && zone.SupportsDaylightSavingTime)   // added second condition
            zone = z;                        // this runs multiple times   
}

这次我得到了三个:

  • 育空标准时间
  • 太平洋标准时间(墨西哥)
  • 太平洋标准时间

是否有可能获得确切的时区? (我知道这个用户在Pacific Standard Time )或者可以使用任何(第一个)并添加一个小时来获得正确的时间吗?

如果您只能使用该日期时间字符串,我怀疑您必须希望他们给您的偏移量与他们的时区夏令时一致(因此对于同一位置可能会有所不同)。

我认为在给出有用的答案之前可能需要更多信息。 这个值来自哪里,夏令时有什么用?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM