Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Time 为什么GMT是计算机时间的标准而不是UTC?_Time_Timezone_Utc_Gmt - Fatal编程技术网

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

Time 为什么GMT是计算机时间的标准而不是UTC?,time,timezone,utc,gmt,Time,Timezone,Utc,Gmt,在我看来,就像我在编程中看到的所有与时间相关的算法一样,GMT是基准时间。例如,我被告知总是将时间存储在GMT+00的DB中,这样时区的变化就不会破坏任何东西 GMT似乎是软件开发的基本时区,我说得对吗 如果是,为什么不是UTC?为什么说“UTC+01”而不是“GMT+01”并不常见,因为即使Unix时间戳也是从UTC定义的(http://en.wikipedia.org/wiki/Unix_time) 我会说,这是因为大多数人都习惯于GMT。如果你要向一个人显示信息,特别是时间,你会想要一种他

在我看来,就像我在编程中看到的所有与时间相关的算法一样,GMT是基准时间。例如,我被告知总是将时间存储在GMT+00的DB中,这样时区的变化就不会破坏任何东西

  • GMT似乎是软件开发的基本时区,我说得对吗

  • 如果是,为什么不是UTC?为什么说“UTC+01”而不是“GMT+01”并不常见,因为即使Unix时间戳也是从UTC定义的(http://en.wikipedia.org/wiki/Unix_time)


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

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

    UTC作为官方时间也被更紧密地跟踪(即,与基于地球自转的“真实”时间更紧密地一致)。但是,除非您的软件需要进行第二次计算,否则使用GMT或UTC不会有任何区别


    尽管如此,您可能会考虑向用户显示哪些内容。一种格式可能比另一种更为熟悉。对于全球应用,我通常会选择UTC,对于欧洲或英国的应用,我会选择GMT。

    这种公认的回答实际上是错误的。首先,它们无论如何都不一样。第二个UTC与基于地球自转的“真实”时间并不更接近,恰恰相反。UTC在“时间”度量方面更精确。每一秒的持续时间都是一样的,因为它是基于原子时的,精度是非常高的(需要三万年才能抵消一秒)

    格林尼治标准时间反而跟踪地球自转,因为这并不总是相同的(地球自转正在减慢),每秒钟都不同。当然,在很短的时间内是不同的。但出于科学目的,UTC比GMT准确得多


    这就是UTC每4/5年变化+2秒的原因(因为地球自转速度较慢,自转所需的每秒钟都必须大于UTC),因此它与GMT地球自转时间相差不到一秒

    GMT和UTC不是一回事。阅读并在其中链接UTC以了解区别

    一些计算机用户感到困惑的是,在Windows 7之前,没有任何Microsoft操作系统完全支持UTC,因此一直将国际时间参考标记为GMT

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

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

    见:


    我想,无论是现在还是6个月后,如果能发现目前使用缩写词“GMT”的是什么,那将是一件非常有趣的事情(以捕捉那些目前使用夏令时的人)

    用这个,我写了这个程序:

    #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';
    }
    

    我很高兴地看到,在所有情况下,UTC偏移量都是
    +0000
    。你永远不知道政客和时区。一些立法机构可以很容易地宣布“青山时间”(明天也可以)。

    我相信GMT和UTC是一样的。区别在于定义它们的组织的名称。英国时间(GMT=格林威治子午线时间)早于国际时间(UTC)。看到了吗,因为UTC是法语,GMT是英语?通常使用
    UTC+01
    :,@arx,你错了!请看我的错误:我认为UTC是法语缩写,但它是英语和法语TUC之间的折衷。GMT和UTC是同一事物的不同名称。没有什么可以转换的。@arx,这是相同的时间,但不是相同的事情!因此,如果两者之间存在差异,那么必须在两者之间进行某种转换,对吗?区别在于GMT与UTC相比不精确,因此不可能进行转换。根据“格林尼治标准时间(GMT)”一词在亚秒级没有精确的定义,但它通常被认为等同于UTC或UT1。在非正式或非正式上下文中使用“GMT”通常意味着UTC或UT1。在技术上下文中,避免使用“GMT”;明确的术语“UTC”或“UT1”“是首选。“”“根据这一点(本节倒数第二段,引用了1983年的一份文件),GMT被正式定义为与UTC相同。唯一需要的转换是将“UTC”更改为“GMT”“以您的格式字符串。稍加更正:根据,UTC是基于原子钟的,而不是像UT1和GMT那样基于地球自转的技术。”。但经过研究,我发现如果你不关心亚秒精度,GMT和UTC是一样的。@Thr4wn UTC和TAI是协调的,但它们之间的间隔超过30秒。这是因为UTC偶尔会增加闰秒以保持在UT1的1秒之内。我认为这是一个精确与精确的问题。UTC和TAI的间隔正好为34秒,但UTC和UT1的关联更为精确(在1秒内)。仅供参考-您描述的是UT1,而不是GMT:“……今天,GMT被视为等同于UTC用于英国民用……导航被视为等同于UT1……”有关Windows的部分不正确。这个标签从GMT改为UTC,只是因为Microsoft认识到UTC是更准确的术语。它与什么可以或不能得到支持无关。未对Windows 7中的时间处理进行功能更改。一些详细信息表明,
    RealTimeIsUniversal
    至少是从Windows 2000开始出现的,可能是在Windows 2000之前(回到Windows NT)。
    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