我对time()
函数不太清楚。
“ man 2 time”表示“ time()返回的时间是自1970年1月1日00:00:00 +0000(UTC)以来的秒数。”
我的问题是
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的时差)。看来我完全错了。
答案 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
[糟糕,我认为这个问题被标记为perl。但是,代码应该足够清晰,可以将想法传达给C程序员。 time
,gmtime
,localtime
和strftime
在两种语言中的行为相似。]
答案 1 :(得分:0)
假设系统时间设置正确,则计算机所在的时区对time()
返回的值没有影响,因为–正如您已经确认的那样–根据定义,UTC是通用的,并且不会因位置而异到位置。