为什么GMT是计算机时间而不是UTC的标准?

时间:2012-01-19 20:07:54

标签: time timezone utc gmt

对我而言,我觉得我在编程时看到过时间相关的算法,GMT是基准时间。例如,我被告知总是将时间存储在GMT + 00的数据库中,以便时区更改不会破坏任何内容。

  1. 我是否认为GMT似乎是软件开发的基准时区?

  2. 如果是这样,为什么不是UTC?考虑到甚至Unix时间戳都是从UTC定义的(http://en.wikipedia.org/wiki/Unix_time)

5 个答案:

答案 0 :(得分:7)

GMT和UTC是同一时间。 UNIX时间基于UTC,因此您可能会在UNIX和* nix系统上找到更多内容。

UTC作为官方时间也被更密切地跟踪(即更接近于基于地球自转的“真实”时间)。但是,除非您的软件需要进行第二次计算,否则无论您使用GMT还是UTC,它都不会产生影响。

虽然,您可以考虑向用户显示哪些内容。一种格式可能比另一种更熟悉。我通常会将UTC用于全球应用程序,而GMT则用于欧洲或英国的应用程序。

答案 1 :(得分:3)

我认为发现IANA timezones目前正在使用缩写&#34; GMT&#34;,现在和现在都是6个月(以捕捉目前夏令时)的内容会很有趣。< / p>

使用这个free, open source C++11/14 library,我写了这个程序:

#include "tz.h"
#include <string>
#include <iostream>
#include <vector>

template <class Duration>
std::vector<date::zoned_time<std::common_type_t<Duration, std::chrono::seconds>>>
find_by_abbrev(date::sys_time<Duration> tp, const std::string& abbrev)
{
    using namespace std::chrono;
    using namespace date;
    std::vector<zoned_time<std::common_type_t<Duration, seconds>>> results;
    auto& db = get_tzdb();
    for (auto& z : db.zones)
    {
        if (z.get_info(tp).abbrev == abbrev)
            results.push_back(make_zoned(&z, tp));
    }
    return results;
}

int
main()
{
    using namespace std::chrono;
    using namespace date;
    auto now = system_clock::now();
    auto v = find_by_abbrev(now, "GMT");
    for (auto const& x : v)
        std::cout << format("%F %H:%M:%S %Z %z", x) << " "
                  << x.get_time_zone()->name() << '\n';
    std::cout << '\n';
    v = find_by_abbrev(now + months{6}, "GMT");
    for (auto const& x : v)
        std::cout << format("%F %H:%M:%S %Z %z", x) << " "
                  << x.get_time_zone()->name() << '\n';
}

这会在地球上搜索当前正在使用&#34; GMT&#34;的所有时区,现在和6个月后,将它们打印出来:

2016-06-18 01:00:25.632773 GMT +0000 Africa/Abidjan
2016-06-18 01:00:25.632773 GMT +0000 Africa/Accra
2016-06-18 01:00:25.632773 GMT +0000 Africa/Bissau
2016-06-18 01:00:25.632773 GMT +0000 Africa/Monrovia
2016-06-18 01:00:25.632773 GMT +0000 America/Danmarkshavn
2016-06-18 01:00:25.632773 GMT +0000 Atlantic/Reykjavik
2016-06-18 01:00:25.632773 GMT +0000 Etc/GMT

2016-12-17 15:55:01.632773 GMT +0000 Africa/Abidjan
2016-12-17 15:55:01.632773 GMT +0000 Africa/Accra
2016-12-17 15:55:01.632773 GMT +0000 Africa/Bissau
2016-12-17 15:55:01.632773 GMT +0000 Africa/Monrovia
2016-12-17 15:55:01.632773 GMT +0000 America/Danmarkshavn
2016-12-17 15:55:01.632773 GMT +0000 Atlantic/Reykjavik
2016-12-17 15:55:01.632773 GMT +0000 Etc/GMT
2016-12-17 15:55:01.632773 GMT +0000 Europe/Dublin
2016-12-17 15:55:01.632773 GMT +0000 Europe/London

我很高兴地看到,在所有情况下,UTC偏移都是+0000。你永远不会与政治家和时区有所了解。一些立法机构可以很容易地宣布“绿山时代”#34; (而且可能明天)。

答案 2 :(得分:2)

这个被接受的回答实际上是错误的。首先,它们无论如何都不一样。第二个UTC不是更接近于&#34; true&#34;基于地球自转的时间恰恰相反。 UTC在时间和时间方面更精确。测量。每一秒都是相同的,因为它是基于原子时间的,精度是可增加的高度(需要3万年来抵消一秒)。

GMT代替地跟踪地球自转,因为这并不总是相同的(地球自转速度减慢)每一秒都不同。当然,在很短的时间内有所不同。但是出于科学目的,UTC比GMT要准确得多。

这就是UTC每4/5年改变+2秒的原因(因为地球旋转每秒旋转所需的速度必须大于UTC),因此它遵循GMT地球旋转时间不到一秒差异。

答案 3 :(得分:1)

我会说这是因为大多数人都习惯了GMT。如果您要向某人显示信息,特别是时间,您需要一种他们可以轻松理解的格式。使用GMT可以节省转换为UTC和返回的额外步骤。

答案 4 :(得分:1)

GMT和UTC不是一回事。阅读https://en.wikipedia.org/wiki/Greenwich_Mean_Time及其中的链接以了解区分。

有些计算机用户对以下事实感到困惑:在Windows 7之前,没有Microsoft操作系统完全支持UTC,因此将国际时间参考标记为GMT。

关键问题是Windows如何读取和设置BIOS时钟。 Windows XP无法将BIOS时钟设置为UTC,因此您必须将BIOX时钟设置为本地时间,然后依靠Windows来跟踪差异。

从Windows 7开始,Windows可以处理将BIOS时钟设置为UTC并执行与UTC一致的所有计算(主要是?),因此Microsoft决定将标签从GMT切换到UTC。

请参阅:

https://superuser.com/questions/185773/does-windows-7-support-utc-as-bios-time