Количество секунд с начала 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 .Тем не менее, код должен быть достаточно понятным, чтобы передать идею программисту на Си.time
, gmtime
, localtime
и strftime
ведут себя одинаково на обоих языках. ]