为什么同一时间的Unix时间戳在不同的时区有所不同

时间:2013-07-18 06:44:12

标签: datetime timestamp unix-timestamp epoch

为什么7/18/2013 11:33在GMT时区和我当地的时区(亚洲/加尔各答)有所不同? 因为Unix时间戳是从纪元时间1/1/1970 00:00:00 GMT开始计算的滴答,所以我知道在不同时区以不同的间隔发生了纪元时间但仍然存在。第二次过去的次数应该是相同的

例如,如果我(+5:30 GMT)和我的朋友(+5:00 GMT)分别从00:00开始计算滴答,那么在18:00时,两个时区的滴答数应相同。那么为什么Unix时间戳也不一样。

需要完全理解这个概念。

3 个答案:

答案 0 :(得分:9)

  

例如,如果我(+5:30 GMT)和我的朋友(+5:00 GMT)分别从00:00开始计算滴答,那么在18:00时,两个时区的滴答数应相同。

不,因为你们都从00:00开始计算 UTC 。这就是定义。所以对你而言,这将意味着自18:30以来的刻度数,而对于你的朋友来说,它将意味着自19:00以来的刻度数。

这个想法是,一个时刻在任何地方都有相同的时间戳值。所以,如果我现在打电话给你(并忽略电话延迟),我们都同意“现在”是一个1374130418的Unix时间戳。你可能有一个不同的当地时间给我,但我们可以用一种通用格式表达“现在”。

有关本地时间与“全球”时间的更多讨论,请参阅Noda Time用户指南的"core concepts"部分。

答案 1 :(得分:0)

正确配置系统后,unix时间戳会显示格林威治自1.1.1970以来的刻度。因此,当您的朋友在当地时间18:00读取时间戳时,您会延迟30分钟,因此有1800秒的差异。

如果不是这种情况,则未正确设置一个或两个系统时钟以使用GMT作为基础。通常这种问题不会产生负面影响,只要您只是在一个系统上工作或者所有系统都以不同方式设置错误。

答案 2 :(得分:0)

Unix时间以seconds since the epoch给出:自00:00:00协调世界时(UTC)或1970年1月1日星期四以来经过的秒数(不计算闰秒)< / p>

GNU date命令有一些非常好的功能,允许您在不同的时间格式之间进行转换。这些在man date中得到了很好的解释,所以我在这里只给你一些例子:

### "Normal" format
$ date
Thu Jun 12 11:44:23 CEST 2014
### Unix time
$ date +%s
1402566271

要转换,您可以使用date标记为-d指定特定日期。但是,要获得Unix日期,这需要一个完整的日期。由于Unix时间指的是整个日期(年,月,日,时间),因此无法将下午3:00转换为Unix时间。因此,举例来说,要获得1987年9月12日的Unix日期,你可以这样做:

$ date -d "3 PM 12 September 1987" +%s
558450000

并将其转换回“正常”日期:

$ date -d "@558450000" 
Sat Sep 12 15:00:00 CEST 1987