c#计算2个国家/地区之间的时差,包括夏令时

时间:2009-09-08 07:12:23

标签: c#

我想知道两个国家之间的时差。 有静态时间差,但在某些时期,夏令时介于两者之间。 据我所知,某些国家的dst期间也不同,所以6月1日国家a和b之间的差异可以是1小时,7月1日可以是2小时,因为DST,1月8日可以再次1等等

是否有框架功能或我是否必须自己计算?

米歇尔

2 个答案:

答案 0 :(得分:7)

你需要知道:

  • 两个时区(使用.NET 3.5中的TimeZoneInfo,记住一个国家/地区可以有多个时区)
  • 即时,例如一个UTC DateTimeDateTimeOffset

此时相对容易:使用TimeZoneInfo.ConvertTime将UTC时刻转换为两个时区的本地时间,并从另一个中减去一个。或者,对它们使用TimeZoneInfo.GetUtcOffset,并从另一个中减去一个偏移量。

以下是一个查找伦敦和山景之间当前差异的示例:

using System;

class Test
{
    static void Main()
    {
        var mountainView = TimeZoneInfo.FindSystemTimeZoneById
            ("Pacific Standard Time");
        var london = TimeZoneInfo.FindSystemTimeZoneById
            ("GMT Standard Time");
        DateTimeOffset now = DateTimeOffset.UtcNow;

        TimeSpan mountainViewOffset = mountainView.GetUtcOffset(now);
        TimeSpan londonOffset = london.GetUtcOffset(now);

        Console.WriteLine(londonOffset-mountainViewOffset); // 8 hours
    }
}

答案 1 :(得分:0)

要查找任何历史差异(例如,对于一个或两个时区的本地DST政策不同,过去的日期),您必须存储每个时区的DST开始/结束/偏移的过去策略并进行处理出去自己

如果您根据加载到Windows中的当前规则集了解差异,那么内置的.NET方法非常简单直接。