5

为什么7/18/2013 11:33GMT 时区和我当地的时区(亚洲/加尔各答)不同?由于 Unix 时间戳是自纪元时间以来计算的刻度,1/1/1970 00:00:00 GMT所以我知道纪元时间在不同时区的不同时间间隔发生,但仍然存在。经过的秒数应该相同

例如,如果我(格林威治标准时间 +5:30)和我的朋友(格林威治标准时间 +5:00)分别从 00:00 开始计算滴答声,那么在 18:00 小时,两个时区的滴答声数量应该相同。那么为什么对于 Unix 时间戳来说同样的事情是不正确的。

需要充分理解这个概念。

4

3 回答 3

9

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

不,因为你们俩都从 00:00 UTC开始计数。这就是定义。因此,对您而言,这将意味着自 18:30 以来的滴答数,而对于您的朋友而言,这将意味着自 19:00 以来的滴答数。

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

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

于 2013-07-18T06:47:26.170 回答
0

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

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

于 2013-07-18T06:54:08.400 回答
0

Unix 时间以自纪元以​​来的秒数给出:自 00:00:00 协调世界时 (UTC) 或 1970 年 1 月 1 日星期四以来经过的秒数(不包括闰秒),

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

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

要进行转换,您可以date使用-d标志指定特定日期。但是,要获得 Unix 日期,这需要是完整的日期。您不能将 3:00PM 转换为 Unix 时间,因为 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
于 2017-04-26T11:34:08.313 回答