如何获得两个时区之间的当前时差

时间:2010-10-07 04:58:31

标签: c# asp.net

我想计算美国/中部时区与英国夏令时之间的当前时差。我的意思是,目前这两个时区都有夏令时,所以他们有6小时的时差。但是在2010年10月31日星期日之后,英国夏季的夏令时将会被取消,届时这两个时区之间将有5小时的时差。

有什么方法可以计算出这些不同的时差吗?

4 个答案:

答案 0 :(得分:21)

只是为给出的答案提供一些具体的代码,这里有一些代码来解决我(在伦敦)和我在山景城的同事之间的当前差异:

using System;

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

        var now = DateTimeOffset.UtcNow;
        TimeSpan londonOffset = london.GetUtcOffset(now);
        TimeSpan googleplexOffset = googleplex.GetUtcOffset(now);
        TimeSpan difference = londonOffset - googleplexOffset;        
        Console.WriteLine(difference);
    }
}

答案 1 :(得分:4)

您可以从不同的时区创建两个日期时间对象,这是一个很好的例子:Creating a DateTime in a specific Time Zone in c# fx 3.5

计算它们之间的差值。

答案 2 :(得分:2)

如果您将自己限制在当前日期,我会得到正确答案。 一般来说,取决于你想要的正确程度,这可能会非常困难。这是因为截至今天的时区中的夏令时可能与历史上的不同。也许在01/04/1950之前没有英国夏令时。或者在悉尼奥运会期间,DST日期在2000年暂时更改。要考虑所有这些因素,您需要一个历史DST / TimeZone数据库。

答案 3 :(得分:2)

TimeZoneInfo.GetUtcOffset的文档中有一个示例,显示了在不同时间计算不同时区的UTC偏移量。您只需要在两个时区的每个感兴趣的特定时间获取UTC偏移量并计算差异。参见:

http://msdn.microsoft.com/en-us/library/bb396378.aspx