对我而言,我觉得我在编程时看到过时间相关的算法,GMT是基准时间。例如,我被告知总是将时间存储在GMT + 00的数据库中,以便时区更改不会破坏任何内容。
我是否认为GMT似乎是软件开发的基准时区?
如果是这样,为什么不是UTC?考虑到甚至Unix时间戳都是从UTC定义的(http://en.wikipedia.org/wiki/Unix_time)
答案 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