繁体   English   中英

.NET 中 UTC 和 GMT 标准时间的区别

[英]Difference between UTC and GMT Standard Time in .NET

在 .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 标准时间是等效的。


更新

经过进一步测试,我发现以下内容似乎是等效的:

“世界标准时间”

“格林威治标准时间”

《摩洛哥标准时间》

而在夏季,以下情况有所不同:

“格林威治标准时间”

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

结束更新

GMT调整为夏令时(DST)。 你可以在这个网站上从马的嘴里听到它

添加这行代码查看问题根源:

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

输出:真。

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

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

在我看来,对术语“GMT”的使用感到困惑,该术语似乎用于表示“格林威治标准时间”以及英国/爱尔兰使用的时区 - 在冬季的格林威治标准时间和英国夏令时间之间转换在夏天,它本身似乎没有一个明确的名字!

为了让事情更加混乱,我运行了MSDN 文档中 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

似乎(至少对我而言)负责在 Microsoft 中定义时区的人在这里真的把水弄得更混乱了。

他们显然想描述在英国/爱尔兰使用的时区,但他们给了它一个 ID,在 ID 和显示名称中包含术语“GMT”和 UTC。 我相当确信这个时区定义(无论它应该叫什么)不是UTC。 它可能有半年与 UTC 非常相似的时间,但仅此而已!

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

GMT 标准时间GMT 夏令时的名称在雷德蒙德以外是未知的。 它们是只出现在名为 Windows 注册表的动物寓言中的神话动物。 在现实世界中,英国在冬天遵守 GMT(格林威治标准时间),在夏天遵守 BST(英国夏令时)。 BST 比 GMT 提前 1 小时(向东)。 欧洲人一般不谈论“夏令时”而是“夏令时”,至少在我知道的语言中是这样。

一位受访者表示应该优先使用UTC而不是GMT 这个来自国际天文学联合会的建议可以追溯到 1935 年。它的要点是,在 1925 年之前,格林威治标准时间是从中午而不是午夜开始计算的,所以即使是 10 年后,歧义的可能性仍然存在。 但是现在有点过时了。 在过去的 80 年里,GMT 和世界时这两个术语几乎是同义词。 当然不完全是。 但是您需要一位天文学家来向您解释其中的区别。 如果您关心小时,而不是秒,您可能不会在意。

GMT 是关于英语国家的民用计时。 它并没有过时。 它被载入英国、爱尔兰、加拿大甚至比利时的法律。

世界时间的各种风格都是关于天文计时的。

我认为,民用计时就是最初的问题。

区别如下:

  • 格林威治标准时间 (GMT)是一个术语,最初指的是伦敦格林威治皇家天文台的平均太阳时。 然而
  • 协调世界时 (UTC) (法语:Temps Universel Coordonné)是一种基于国际原子时 (TAI) 的时间标准,并以不规则的间隔添加闰秒以补偿地球的缓慢自转
  • 另一方面,夏令时 (DST)是随着季节变化而推进时钟,以最大限度地利用日光。

    "It is observed in many countries but not all" 这可能是可变的,因为去年夏天,巴基斯坦等一些国家决定比平时晚一个月恢复时钟。

  • World Time Zones是获取全球最新时间信息的好资源。

希望这可以帮助

“GMT标准时间” = 英国时间(如果是英国的夏季,则冬季为 GMT+0 或 GMT+1。)

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

普通的旧“GMT”(或格林威治标准时间)或多或少是 UTC,给出或花费几毫秒。 它不会针对英国的夏令时进行调整,因此我们从未有过使用案例。

所有其他答案都以非常冗长的方式解释了这一点,其中一些答案具有误导性或矛盾性,因此我想提供另一个答案,希望它可以避免某些人的阅读和困惑。

具有"GMT Standard Time".IdTimeZoneInfo对象对应于"(UTC) Dublin, Edinburgh, Lisbon, London".DisplayName

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

参考这里

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

它们是两种不同的时区设置。

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

时区列表

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

这里是Coordinated Universal Timezones的讨论。 当时间范围需要高精度时,似乎通常使用UTC。 Greenwhich 同时非常接近并且与 UTC 来回使用。

希望这对一些人有所帮助。

暂无
暂无

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

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