.NET与GMT标准时间之间的差异

时间:2010-02-18 21:29:15

标签: .net timezone utc gmt

在.NET中,以下语句返回不同的值:

Response.Write(
  TimeZoneInfo.ConvertTime(
    DateTime.Parse("2010-07-01 5:30:00.000"),
    TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"),
    TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time"))
  );
// displays 7/1/2010 1:30:00 PM

..而且......

Response.Write(
  TimeZoneInfo.ConvertTime(
    DateTime.Parse("2010-07-01 5:30:00.000"),
    TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"),
    TimeZoneInfo.FindSystemTimeZoneById("UTC"))
  );
// displays 7/1/2010 12:30:00 PM

这是为什么?我认为UTC和GMT标准时间相当。


更新

经过进一步测试,我发现以下出现等同于:

  

“UTC”

     

“格林威治标准时间”

     

“摩洛哥标准时间”

然而,夏季月份的情况有所不同:

  

“GMT标准时间”

也许我的问题应该是,为什么“格林威治标准时间”和“格林威治标准时间”不同?

结束更新

7 个答案:

答案 0 :(得分:34)

GMT不会 调整Daylight saving time(DST)。你可以在web site.

的马口听到它

添加以下代码行以查看问题的根源:

  Console.WriteLine(TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time").SupportsDaylightSavingTime);

输出:True。

这不是.NET问题,而是Windows搞乱了。 TimeZoneInfo使用的注册表项是HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones \ GMT标准时间。你最好坚持使用UTC。

答案 1 :(得分:21)

[我真的只是支持Hans Passant的回答]

在我看来,使用“格林威治标准时间”这个术语时的混淆似乎用来表示“格林威治标准时间”以及英国/爱尔兰使用的时区 - 在冬季和格林威治标准时间之间翻转夏季的英国夏令时,似乎没有明确的名称!

为了让事情更加混乱,我从MSDN docs for TimeZoneInfo.GetSystemTimeZones运行了示例代码并查看了输出。

我很惊讶地看到“GMT标准时间”时区的以下定义

ID: GMT Standard Time
   Display Name:  (UTC) Dublin, Edinburgh, Lisbon, London
   Standard Name:                       GMT Standard Time
   Daylight Name:                       GMT Daylight Time   ***Has Daylight Saving Time***
   Offset from UTC:                       0 hours, 0 minutes
   Number of adjustment rules:                          1
   Adjustment Rules:
      From 01/01/0001 00:00:00 to 31/12/9999 00:00:00
      Delta: 01:00:00
      Begins at 01:00 on Sunday of week 5 of March
      Ends at 02:00 on Sunday of week 5 of October

似乎(至少对我来说)谁负责在微软定义时区,谁在这里进一步混淆了水域。

他们显然想描述在英国/爱尔兰使用的时区,但他们给了它一个ID,其中包括ID和显示名称中的“GMT”和UTC。我相信这个时区定义(不管它应该被称为)是不是 UTC。它有可能在一年中的一半时间与UTC非常相似,但这就是全部!

答案 2 :(得分:13)

区别如下:

  • Greenwich Mean Time (GMT)是 最初指平均值的术语 皇家天文台的太阳时 在伦敦格林威治。而
  • Coordinated Universal Time (UTC)(法语:Temps Universel Coordonné)是基于时间标准的 国际原子时(TAI) 闰秒增加不规则 间隔来弥补 地球的旋转减速
  • Day Light Saving Time (DST) 另一方面是 推进时钟与... 季节变化,最大限度地利用 日光。

    "It is observed in many countries but not all"。它可能是变数,正如去年夏天一些像巴基斯坦这样的国家决定比往常晚一个月带回钟表。

  • World Time Zones很好 最新时间的资源 全球各地的信息。

希望这有帮助

答案 3 :(得分:12)

这是一个迟到的回复,原始提问者不太可能阅读,但谷歌可能会找到这个主题的人。

名称​​ GMT标准时间 GMT日光时间在Redmond之外是未知的。它们是神秘的动物,只出现在被称为Windows注册表的动物群中。在现实世界中,在冬季,英国观察格林威治标准时间(格林威治标准时间),夏季观察英国夏令时(BST)。 BST比GMT提前1小时(向东)。欧洲人一般不会谈论“白昼时间”而是“夏季时间”,至少在我所知的语言中。

一位受访者表示应优先使用 UTC GMT 。这个来自国际天文学联盟的建议可以追溯到1935年。它的观点是,在1925年之前,格林威治标准时间从中午开始算到午夜,所以即使是10年之后,模糊的可能性仍然存在。但它现在有点过时了。在过去的80年里,GMT和环球时间这两个术语几乎是同义词。当然不是。但是你需要一位天文学家来解释你的不同之处。如果你担心几小时而不是几秒钟,你可能不会在乎。

GMT是关于英语国家的民事计时。它不是过时的。它在英国,爱尔兰,加拿大甚至比利时都有法律规定。

世界时的各种风格都与天文计时有关。

我认为民事计时是最初的问题所在。

答案 4 :(得分:1)

TimeZoneInfo .Id "GMT Standard Time" .DisplayName对象与"(UTC) Dublin, Edinburgh, Lisbon, London"的{​​{1}}对应。

此时区在冬季使用格林威治标准时间(GMT)(UTC + 0),在夏季使用英国夏令时(BST)(UTC + 1)。

Reference here

UTC的时区有.Id "UTC".DisplayName "(UTC) Coordinated Universal Time"

他们是两个不同的时区设置。

此外,在Windows中查看时区显示名称列表时:

Time Zone List

括号中的值只是标准偏移量,因此虽然看起来有四种不同的UTC设置,但实际上只有一种。只有当夏令时没有生效时,其他三个区域才使用UTC作为基准偏移。

答案 5 :(得分:1)

“格林尼治标准时间标准时间” =英国时间(冬季为英国格林尼治标准时间+0,夏季为英国格林尼治标准时间+1)。

基本上,如果要将UTC转换为英国时间,请使用“ GMT 标准时间

普通的旧“ GMT”(或格林威治标准时间)或多或少是UTC,时间为几毫秒。在英国,它不能适应夏令时,因此我们从未有过用例。

所有其他答案对此作了很长的解释,其中有些答案具有误导性或矛盾性,因此我想提供另一个答案,希望它可以使别人省去所有的阅读和混乱。 / p>

答案 6 :(得分:0)

以下是对Coordinated Univeral Timezones的讨论。似乎UTC通常在时间范围需要高精度时使用。 Greenwhich Meantime非常接近,并与UTC来回使用。

希望这会有所帮助。