如题目所问;UNIX时间戳在每个时区都有变化吗?

例如,如果我向世界另一端的另一个电子邮件发送请求,说“在时间为1397484936时发送电子邮件”,另一个服务器的时间戳会比我自己的时间戳晚12小时吗?


当前回答

Unix时间戳不会因时区而改变,它们是为了在全球范围内具有标准时间而创建的。

注意:- 时间戳是根据计算机中的当前时间计算的,因此除非您非常确定参与机器中的时间设置,否则不要依赖于它们。

其他回答

如果两台计算机都正确设置,并将其时钟设置为正确的时区和UTC值,则它们应该返回相同的值。

当然,这是一个很大的假设。几乎可以肯定,两台计算机报告的时间之间至少有一秒钟的差异,更经常的是几分钟。而且许多计算机的时区设置不正确,当被要求提供时间戳而不是UTC时,会报告本地时间。

这就是理论与实践的区别。理论上都是一样的,实际上你不应该依赖它。

Unix时间被定义为从协调世界时(UTC) 1970年1月1日星期四00:00:00开始经过的秒数。所以答案是否定的

不,epoch时间戳不应该改变,因为它有一个固定的时区,即UTC。

如果你想在其他时区使用一个时间对象,只需在你使用的语言库中查找它,但不要试图从epoch时间戳中添加/减去几个小时,并假设它在另一个时区,这会让其他人感到非常困惑,特别是当你在API中公开它时。

如果你使用c++,我推荐这个库。我听说它很快就会被加入标准库。

总的来说,我知道有时时间对象很难处理,在epoch时间戳上添加/子结构看起来更容易。请自己不要去做,也不要劝说别人去做。一旦你习惯了时间对象,你就可以很容易地进行时区转换,而不会因为政治/法律等原因而搞砸历史时区的更改……

The definition of UNIX timestamp is time zone independent. The UNIX timestamp is the number of seconds (or milliseconds) elapsed since an absolute point in time, midnight of Jan 1 1970 in UTC time. (UTC is Greenwich Mean Time without Daylight Savings time adjustments.) Regardless of your time zone, the UNIX timestamp represents a moment that is the same everywhere. Of course you can convert back and forth to a local time zone representation (time 1397484936 is such-and-such local time in New York, or some other local time in Djakarta) if you want.

如果你想要更长的阅读时间,http://en.wikipedia.org/wiki/Unix_time上的文章非常令人印象深刻。

Unix时间戳不会因时区而改变,它们是为了在全球范围内具有标准时间而创建的。

注意:- 时间戳是根据计算机中的当前时间计算的,因此除非您非常确定参与机器中的时间设置,否则不要依赖于它们。