【问题标题】:Determining if a UTC time is within DST确定 UTC 时间是否在 DST 内
【发布时间】:2013-09-25 19:22:57
【问题描述】:

在 C# 中,给定 UTC 时间,我如何确定这是否属于美国德克萨斯州休斯顿的 DST?

var utcDateTime = new DateTime(2013,1,1,0,0,0,DateTimeKind.Utc);


//bool fallsWithinDstInAmerica = ...?

【问题讨论】:

  • 您所说的“在休斯顿的 DST 范围内”是什么意思?
  • 知道时差是 6 小时吗?你可以减去它们并检查你是否有一个负值然后不属于它。

标签: c# date time timezone


【解决方案1】:

为德克萨斯州获取适当的TimeZoneInfo,然后使用IsDaylightSavingTime

using System;

class Test
{
    static void Main()
    {
        // Don't be fooled by the "standard" part - this is Central Time
        var zone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
        var winter = new DateTime(2013, 1, 1, 0, 0, 0, DateTimeKind.Utc);
        var summer = new DateTime(2013, 6, 1, 0, 0, 0, DateTimeKind.Utc);
        Console.WriteLine(zone.IsDaylightSavingTime(winter)); // False
        Console.WriteLine(zone.IsDaylightSavingTime(summer)); // True
    }
}

或者使用Noda Time,可以求出夏令时的量,与偏移量0比较:

using System;
using NodaTime;

class Test
{
    static void Main()
    {
        var zone = DateTimeZoneProviders.Tzdb["America/Chicago"];
        var winter = Instant.FromUtc(2013, 1, 1, 0, 0);
        var summer = Instant.FromUtc(2013, 6, 1, 0, 0);

        Console.WriteLine(zone.GetZoneInterval(winter).Savings); // +00
        Console.WriteLine(zone.GetZoneInterval(summer).Savings); // +01
        Console.WriteLine(zone.GetZoneInterval(winter).Savings != Offset.Zero); // False
        Console.WriteLine(zone.GetZoneInterval(summer).Savings != Offset.Zero); // True
    }
}

【讨论】:

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