对UTC感到困惑

时间:2019-03-13 21:20:14

标签: c time

我对time()函数不太清楚。 “ man 2 time”表示“ time()返回的时间是自1970年1月1日00:00:00 +0000(UTC)以来的秒数。”

我的问题是

  • 假设设备A在伦敦,设备B在美国。 time()是否返回相同的值?还是time()结果随时区改变?

====更新====

我知道我的真正问题。我以为UTC是时区。因为维基百科说“在一些说英语的国家,格林威治标准时间(GMT)经常被用作UTC的同义词”,所以我在想,美国的time()应该返回(A + B)。 A当前在美国是美国的“ 1970-01-01 00:00:00 +0000”。 B是(1970-01-01 00:00:00 +0000 USA到1970-01-01 00:00:00 +0000 GMT的时差)。看来我完全错了。

2 个答案:

答案 0 :(得分:4)

自1970年UTC开始以来的秒数不会根据您所在的世界而变化,因此time会返回相同的值,而不管您位于世界上的什么地方(假设系统时钟正确) )。

到本地时间的转换是通过后续操作执行的。

$ TZ=America/Toronto perl -MPOSIX -le'
   my $time = time();
   print $time;
   print strftime("%FT%TZ", gmtime($time));
   print strftime("%FT%T%z", localtime($time)) =~ s/(?=..\z)/:/sr;
'
1552516168
2019-03-13T22:29:28Z
2019-03-13T18:29:28-04:00

$ TZ=America/Halifax perl -MPOSIX -le'
   my $time = time();
   print $time;
   print strftime("%FT%TZ", gmtime($time));
   print strftime("%FT%T%z", localtime($time)) =~ s/(?=..\z)/:/sr;
'
1552516168
2019-03-13T22:29:28Z
2019-03-13T19:29:28-03:00

[糟糕,我认为这个问题被标记为。但是,代码应该足够清晰,可以将想法传达给C程序员。 timegmtimelocaltimestrftime在两种语言中的行为相似。]

答案 1 :(得分:0)

假设系统时间设置正确,则计算机所在的时区对time()返回的值没有影响,因为–正如您已经确认的那样–根据定义,UTC是通用的,并且不会因位置而异到位置。