代码之家  ›  专栏  ›  技术社区  ›  nathan

关于time()函数的困惑

  •  -1
  • nathan  · 技术社区  · 6 年前

    我不太清楚这个问题 time() “man 2 time”表示“time()将时间返回为自1970-01-01 00:00:00+0000(UTC)纪元以来的秒数。”

    • 假设设备A在伦敦,设备B在美国。 时间() 时间()

    ==更新====

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

    1 回复  |  直到 6 年前
        1
  •  4
  •   ikegami Gilles Quénot    6 年前

    自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
    

    [ 哎呀,我还以为这个问题被贴上标签了呢 时间 gmtime , localtime strftime 在两种语言中表现相似。 ]

        2
  •  0
  •   HumbleOne    6 年前

    time() 返回,因为您已经确认TC根据定义是通用的,并且不会因位置而异。