UTC和GMT标准时间在.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标准时间是相同的。
更新
经过进一步testing,我发现以下内容似乎是等同的:
“世界标准时间”
“格林威治标准时间”
“摩洛哥标准时间”
鉴于夏季月份以下情况不同:
“格林尼治标准时间”
也许我的问题应该是,为什么“格林威治标准时间”和“格林尼治标准时间”不同?
结束更新
GMT不调整夏令时 (DST)。 你可以在这个网站上从马的嘴里听到。
添加下面这行代码来查看问题的根源:
Console.WriteLine(TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time").SupportsDaylightSavingTime);
输出:真。
这不是一个.NET的问题,它是Windows搞乱了。 TimeZoneInfo使用的registry项是HKLM \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Time Zones \ GMT标准时间。 你最好坚持使用UTC。
[我真的只是支持Hans Passant的答案]
在我看来,使用“格林尼治标准时间”这个词似乎是一个混乱,这个词的意思是“格林威治标准时间”,也是英国/爱尔兰使用的时区,冬季格林尼治标准时间与英国夏令时在夏天,似乎没有一个明确的名字在自己的权利!
为了更加混淆事物,我运行了TimeZoneInfo.GetSystemTimeZones的MSDN文档中的示例代码,并查看了输出。
我非常惊讶地看到“GMT标准时间”时区的下列定义
编号:GMT标准时间 显示名称:(UTC)都柏林,爱丁堡,里斯本,伦敦 标准名称:GMT标准时间 夏令时名称:GMT夏令时***有夏令时*** 从UTC抵消:0小时0分钟 调整规则的数量:1 调整规则: 从01/01/0001 00:00:00至31/12/9999 00:00:00 Delta:01:00:00 3月5日周日01:00开始 10月5日周日02:00结束
看起来(至less在我看来)谁负责定义微软的时间区域,实际上已经在这里进一步混淆了水域。
他们显然想描述在英国/爱尔兰使用的时区,但是他们给了它一个ID,在ID和显示名称中包括术语“GMT”和UTC。 我相当确信这个时区定义(不pipe它应该被称为) 不是 UTC。 它可能有一半时间与UTC非常相似,但这就是全部!
区别如下:
- 格林威治标准时间(GMT)是指伦敦格林威治皇家天文台的平均太阳时间。 而
- 协调世界时(UTC) (法文:Temps UniverselCoordonné)是基于国际primefaces时间(TAI)的时间标准,以不规则间隔增加闰秒来补偿地球的减速旋转
-
另一方面, 日光节约时间(DST)正在推进时钟以适应季节变化,以最大限度地利用日光。
"It is observed in many countries but not all"
。 这可能是变化的,去年夏天,一些像巴基斯坦这样的国家决定比通常晚一个月的时间倒计时。 -
世界时区是全球最新的时间信息的良好资源。
希望这可以帮助
这是一个迟到的回应,原来的提问者不太可能阅读,但哪些谷歌这个主题的人可能会发现。
除了Redmond外, GMT标准时间和GMT夏令时间的名称是未知的。 他们是神话般的动物,只出现在称为Windowsregistry的兽医。 在现实世界中,英国冬季的格林尼治标准时间(GMT)和夏季的英国夏令时(BST)都是在英国观测的。 BST比格林威治标准时间提前1小时(东)。 欧洲人通常不会谈论“夏令时”,而是“夏令时”,至less用我所知道的语言来说。
一位受访者表示,应该使用UTC而不是GMT 。 国际天文学联合会的这一build议可以追溯到1935年。其意义在于,在1925年以前,格林尼治标准时间从中午开始计算,而不是午夜,所以即使在10年后,模糊的可能性仍然可能持续下去。 但现在有点过时了。 在过去的80年里,格林尼治标准时间和世界时间几乎是同义词。 当然不是。 但是你需要一个天文学家向你解释这个区别。 如果你关心的是几个小时,而不是几秒钟,你可能不会在意。
格林威治标准时间是英语国家的民事计时。 它并没有过时。 它在英国,爱尔兰,加拿大,甚至比利时都被奉为法律。
世界各地的各种口味都是关于天文计时的。
我认为,民间计时是原来的问题。
具有"GMT Standard Time"
的.Id
的TimeZoneInfo
对象对应于"(UTC) Dublin, Edinburgh, Lisbon, London"
的.DisplayName
。
此时区在冬季使用格林尼治标准时间(GMT)(UTC + 0),夏季使用英国夏令时(BST)(UTC + 1)。
在这里引用 。
UTC的时区具有"UTC"
的.Id
和"(UTC) Coordinated Universal Time"
的.DisplayName
。
他们是两个不同的时区设置。
另外,在Windows中查看时区显示名称列表时:
括号中的值只是标准偏移量,所以看起来UTC有四种不同的设置,实际上只有一个。 只有在夏令时不生效的情况下,其他三个区域使用UTC作为基准偏移。
以下是对协调一致的时区的讨论。 在时间框架需要高精度时,通常使用UTC。 Greenwhich Meantime非常接近并且与UTC一起使用。
希望这有助于一些。