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

Datetime 为什么同一时间的Unix时间戳在不同时区不同,datetime,timestamp,unix-timestamp,epoch,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时间戳的情况并非如此呢 需要充分理解这个概念 例如,如果我(+5:30

为什么
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时间戳的情况并非如此呢

需要充分理解这个概念

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

不,因为你们都是从UTC的00:00开始计数的。这就是定义。对你来说,这意味着从18:30开始的滴答声的数量,对你的朋友来说,这意味着从19:00开始的滴答声的数量

其思想是,时间中的单个瞬间在任何地方都具有相同的时间戳值。所以,如果我现在给你打电话(忽略电话延迟),我们都会同意“现在”是一个Unix时间戳1374130418。对我来说,你可能有不同的当地时间,但我们可以用通用格式表示“现在”


有关本地时间与“全局”时间的更多讨论,请参阅《野田佳彦时间用户指南》的一部分。

如果系统配置正确,unix时间戳将显示自1970年1月1日起在格林威治的滴答声。因此,当您的朋友在当地时间18:00读取时间戳时,您会延迟30分钟,因此有1800秒的时间差

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

Unix时间表示为:自协调世界时(UTC)00:00:00或1970年1月1日星期四起经过的秒数(不包括闰秒)

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

### "Normal" format
$ date
Thu Jun 12 11:44:23 CEST 2014
### Unix time
$ date +%s
1402566271
要转换,您可以使用
-d
标志为
日期
指定一个特定日期。但是,要获得Unix日期,必须是完整日期。无法将下午3:00转换为Unix时间,因为Unix时间指的是整个日期(年、月、日、时间)。例如,要获得1987年9月12日的Unix日期,您可以执行以下操作:

$ date -d "3 PM 12 September 1987" +%s
558450000
要将该日期转换回“正常”日期:


大粉丝先生:),同意,但是先生,为什么不在我的00:00开始计时,在他的00:00开始计时呢。这样,我们在世界上的同一时间都有相同的时间戳,因为Unix时间戳只是经过的秒数。这有什么重大区别。“你能解释一下吗?”丁卡塔库尔:因为那样会给全世界带来不同的时间戳。关键是,在某一时刻,格林威治标准时间是00:00,你是18:30,你的朋友是19:00。这一瞬间只有一个时间戳。实际上,在格林威治,它会显示Unix时代的01:00,因为英国在整个1970年都使用GMT+1。只是增加了一点混乱:(
$ date -d "@558450000" 
Sat Sep 12 15:00:00 CEST 1987