.NET 中 UTC 和 GMT 标准时间之间的差异
Posted
技术标签:
【中文标题】.NET 中 UTC 和 GMT 标准时间之间的差异【英文标题】:Difference between UTC and GMT Standard Time in .NET 【发布时间】:2011-01-18 12:55:11 【问题描述】:在 .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 标准时间是等价的。
更新
经过进一步测试,我发现以下似乎是等效的:
“世界标准时间”
“格林威治标准时间”
“摩洛哥标准时间”
然而,夏季月份的情况有所不同:
“格林威治标准时间”
也许我的问题应该是,为什么“格林威治标准时间”和“格林威治标准时间”不同?
结束更新
【问题讨论】:
困惑的不止你一个:connect.microsoft.com/VisualStudio/feedback/details/298123/… 链接已失效 【参考方案1】:GMT不针对Daylight saving time (DST) 进行调整。你可以在这个web site.上听到马嘴里的声音
添加这行代码查看问题根源:
Console.WriteLine(TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time").SupportsDaylightSavingTime);
输出:真。
这不是 .NET 问题,而是 Windows 搞砸了。 TimeZoneInfo 使用的注册表项是 HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones\GMT 标准时间。你最好坚持使用 UTC。
【讨论】:
有趣... 而 TimeZoneInfo.FindSystemTimeZoneById("格林威治标准时间") 返回 false,与 UTC 相同。 我不认为 Windows 搞砸了,这只是术语混乱。他们使用 GMT 来指代包含都柏林、爱丁堡、里斯本、伦敦等地的时区,而那些确实使用夏令时。 @HansPassant 您能否指出wwp.greenwichmeantime.com/what-is-gmt.htm 指出GMT 不针对DST 进行调整(我认为这意味着UTC 会)?我自己也这么认为——GMT 会针对 DST 进行调整,而 UTC 则不会,但现在我不相信。我目前的理解是 GMT 和 UTC 本身是固定的,时区反映为偏移量,而 DST 是对该固定时间的进一步调整。因此,换句话说,格林威治标准时间就是格林威治标准时间,如果您在观察夏令时的地区,这将反映为格林威治标准时间 +/- 时区偏移和夏令时调整。 @MAtt wwp.greenwichmeantime.com/what-is-gmt 我住在英国,当时钟改变时,我们坚持从格林威治标准时间到英国夏令时 格林威治标准时间从来没有夏令时 - 这是基本时间【参考方案2】:[我真的只是支持 Hans Passant 的回答]
在我看来,“格林威治标准时间”一词的使用似乎很混乱,它似乎被用来表示“格林威治标准时间”以及英国/爱尔兰使用的时区——它在冬季的格林威治标准时间和夏天的英国夏令时,本身似乎没有一个明确的名称!
为了让事情更加混乱,我运行了MSDN docs for TimeZoneInfo.GetSystemTimeZones 中的示例代码并查看了输出。
看到以下“GMT 标准时间”时区的定义,我感到非常惊讶
ID:格林威治标准时间 显示名称:(UTC) 都柏林、爱丁堡、里斯本、伦敦 标准名称:GMT 标准时间 夏令时名称:GMT 夏令时***有夏令时*** 与 UTC 的偏移量:0 小时 0 分钟 调整规则数:1 调整规则: 从 01/01/0001 00:00:00 到 31/12/9999 00:00:00 达美:01:00:00 3 月第 5 周周日 01:00 开始 于 10 月第 5 周的星期日 02:00 结束似乎(至少在我看来)负责在 Microsoft 中定义时区的人确实把这里的水搅得更深了。
他们显然想描述英国/爱尔兰使用的时区,但他们给了它一个 ID,在 ID 和显示名称中包含术语“GMT”和 UTC。我相当有信心这个时区定义(无论它应该被称为什么)是不是 UTC。它可能有半年时间与 UTC 非常相似,但仅此而已!
【讨论】:
英国有相当一部分人认为 GMT 表示他们居住地的挂钟时间,换句话说,它会在夏季向前移动。他们错了。但为了适应这种普遍存在的误解,我的妻子在组织在线游戏活动时指定了 UK time 而不是 GMT 或 BST。【参考方案3】:这是一个较晚的回复,最初的提问者不太可能阅读,但谷歌搜索该主题的人可能会找到。
GMT 标准时间 和 GMT 夏令时 这两个名称在雷德蒙德之外是未知的。它们是只出现在名为 Windows 注册表的动物寓言中的神话动物。在现实世界中,英国在冬季遵守 GMT(格林威治标准时间),在夏季遵守 BST(英国夏令时)。 BST 比格林威治标准时间提前 1 小时(向东)。欧洲人通常不会谈论“夏令时”而是“夏令时”,至少在我所知道的语言中是这样。
一位受访者表示应该优先使用 UTC 而不是 GMT。这个来自国际天文学联合会的建议可以追溯到 1935 年。它的要点是,在 1925 年之前,GMT 是从中午而不是午夜开始计算的,所以即使是 10 年后,模棱两可的可能性可能仍然存在。但是现在有点过时了。在过去的 80 年里,GMT 和世界时这两个术语几乎是同义词。不完全是,当然。但是您需要一位天文学家向您解释其中的差异。如果您关心的是几小时而不是几秒钟,那么您可能不会在意。
GMT 是关于英语国家的民用计时。它并没有过时。它在英国、爱尔兰、加拿大甚至比利时都被载入法律。
世界时的各种风格都与天文计时有关。
我认为,民间计时是最初的问题。
【讨论】:
【参考方案4】:区别如下:
Greenwich Mean Time (GMT) 是 原指意思的术语 皇家天文台的太阳时 在伦敦格林威治。而 Coordinated Universal Time (UTC)(法语:Temps Universel Coordonné) 是基于时间标准的 国际原子时 (TAI) 不规则地添加闰秒 间隔来补偿 地球的缓慢自转Day Light Saving Time (DST) 另一方面是 推进时钟 To 和 for with 季节变化,最大限度地利用 日光。
"It is observed in many countries but not all"
。这可能是可变的,因为去年夏天,一些国家(例如巴基斯坦)决定比平时晚一个月恢复时钟。
World Time Zones 不错 最新时间的资源 全球信息。
希望对你有帮助
【讨论】:
我建议您重新格式化您的答案,因为在呈现方式上,读者可能会认为 GMT、UTC 和 DST 的含义是相似的。 GMT 和 UTC 是类似的,但 DST 不是。【参考方案5】:"GMT 标准时间" = 英国时间(冬季为 GMT+0,英国夏季为 GMT+1。)
基本上,如果您想将 UTC 转换为英国时间,请使用“GMT 标准时间”
普通的旧“GMT”(或格林威治标准时间)或多或少是 UTC,或多或少是几毫秒。它不会针对英国的夏令时进行调整,因此我们从未有过它的用例。
所有其他答案都以非常冗长的方式解释了这一点,其中一些具有误导性或矛盾性,因此我想提供另一个答案,希望它可以节省人们所有的阅读和困惑。
【讨论】:
这很有帮助。它实际上进入了重点。【参考方案6】:具有"GMT Standard Time"
的.Id
的TimeZoneInfo
对象对应于"(UTC) Dublin, Edinburgh, Lisbon, London"
的.DisplayName
。
该时区在冬季使用格林威治标准时间 (GMT) (UTC+0),在夏季使用英国夏令时 (BST) (UTC+1)。
Reference here.
UTC 的时区有 .Id
和 "UTC"
和 .DisplayName
和 "(UTC) Coordinated Universal Time"
。
它们是两种不同的时区设置。
此外,在查看 Windows 中的时区显示名称列表时:
括号中的值只是标准偏移量,所以虽然看起来有四种不同的UTC设置,但实际上只有一种。只是其他三个时区在夏令时无效时使用 UTC 作为其基本偏移量。
【讨论】:
【参考方案7】:这里是Coordinated Univeral Timezones 的讨论。当时间范围需要高精度时,似乎通常使用 UTC。 Greenwhich 同时非常接近,并与 UTC 来回使用。
希望这会有所帮助。
【讨论】:
GMT(格林威治标准时间)近来被大量误用,对于国际或全球标准,通常应将其替换为 UTC,但处理英国境内的“标准时间”除外。 “时间,时间,时间......看看我变成了什么......”(保罗西蒙/书挡)以上是关于.NET 中 UTC 和 GMT 标准时间之间的差异的主要内容,如果未能解决你的问题,请参考以下文章