GMT 与 UTC 日期

Posted

技术标签:

【中文标题】GMT 与 UTC 日期【英文标题】:GMT vs UTC dates 【发布时间】:2010-12-09 09:19:23 【问题描述】:

我有一个内置在 javascript 中的日历,可以将日期与 php 进行比较。 JavaScript 日期对象是使用 PHP 设置的,但是,当我比较未来的日期时,它们似乎不同步。

PHP 设置为 GMT,JavaScript 设置为 UTC;这些标准有何不同,这是否会导致问题?

【问题讨论】:

出于实际目的(当然所有情况下计算机都会看到),GMT 是 UTC。您的时区问题出在其他地方。让我们看一些代码。 【参考方案1】:

来自***上的Coordinated Universal Time:

协调世界时 (UTC) 是基于国际原子时 (TAI) 的时间标准,其中不定期添加闰秒以补偿地球自转速度减慢。

来自***上的Greenwich Mean Time:

UTC 是一个原子时标,仅与 GMT 近似,误差为 0.9 秒

【讨论】:

这对于几乎任何应用程序都应该是可以忽略的。异常很少见,而且这些异常不太可能用 PHP 编写。 那应该是 UT1 而不是 GMT。 更重要的是:“[UTC] 是格林威治标准时间 (GMT) 的几个密切相关的继任者之一。在大多数情况下,UTC 被认为可以与 GMT 互换,但 GMT 不再精确定义为科学界”【参考方案2】:

一个来自太阳,另一个来自atomic clock。

出于您的目的,它们是相同的。

【讨论】:

【参考方案3】:

对于计算机,GMT 是 UTC+0 - 所以它们是等价的。

【讨论】:

【参考方案4】:

如果您严格按照 UTC 和 GMT 的定义来定义,那么就像其他人指出的那样,没有真正的实际区别。

但是需要小心,因为在某些情况下会使用(可能是遗留的)术语,例如Microsoft Timezone index values

不同之处在于,在这种情况下,所谓的“GMT 时区”(代码 55)实际上是“GMT 语言环境”,它是都柏林、爱丁堡、里斯本、伦敦使用的语言环境(所有其中遵守夏令时),与蒙罗维亚和雷克雅未克使用的格林威治标准时间(代码 5A)不同,两者都不遵守夏令时。

实际的区别在于,如果系统设置为使用 UTC(代码 80000050 在上面指定的语义下),那么它不会自动切换到夏令时,而如果您将时区设置为 GMT(代码 55),那么很有可能它会在夏季自动切换到 BST,而您不会注意到。

【讨论】:

如果您将其设置为“GMT”,则应该留在那里。如果您将其设置为“伦敦”,则应遵循该地区在夏季切换到 BST 的民用时间规则 @Jasen 据我所知,伦敦不是一个时区,而是一个地区。您可以将服务器设置为伦敦区域设置,但服务器将在半年报告 GMT 作为其时区,在另一半报告 BST。但是,如果您没有设置语言环境,那么它只会全年报告 UTC。如果您使用的是 Windows,那么伦敦语言环境被混淆地称为 GMT 或 BST 或由于某种原因而模棱两可的东西。这只是一整罐你真的不想打开的蠕虫。 完全同意 WRT windows。 不正确。不要将 UTC/GMT 与 London time 混为一谈。伦敦时间采用夏令时 (DST)。根据定义,UTC 和 GMT 不是。 UTC/GMT 是所有其他时区和 DST 的基准,通过提前或落后一些小时-分钟-秒的偏移量来衡量。在伦敦没有 DST 的半年时间里,它的挂钟时间恰好与 UTC/GMT 重合。 UTC/GMT 经度的地理位置恰好穿过伦敦(格林威治),但从概念上讲这无关紧要。 @BasilBourque 当人们阅读微软时区时,有时会感到困惑,例如support.microsoft.com/en-gb/help/973627/… 伦敦时区被命名为 GMT 标准时间,并且 UTC 有不同的代码。深入挖掘你会发现这是因为他们所谓的“GMT”实际上是“伦敦时间”,可以是 GMT 或 BST。

以上是关于GMT 与 UTC 日期的主要内容,如果未能解决你的问题,请参考以下文章

在 Swift 中将日期从 GMT+1 转换为 UTC 时的困惑

如何在 C# 中拒绝来自客户端的非 UTC/GMT 日期?

ASP.Net C# UTC/GMT 日期时间

在 MySQL 中将 UTC 格式的日期时间转换为 GMT+7

在python中获取给定日期和UTC偏移量的GMT时间

Log4cpp:在 UTC/GMT 时区打印日期