根据主题的要求;UNIX时间戳在每个时区都会改变吗?
例如,如果我向世界另一端的另一封电子邮件发送请求,说"在时间为1397484936时发送电子邮件",那么其他服务器的时间戳会比我的时间戳晚12小时吗?
UNIX时间戳的定义与时区无关。UNIX时间戳是自UTC时间1970年1月1日午夜的绝对时间点以来经过的秒数(或毫秒)。(UTC是格林尼治标准时间,没有夏令时调整。)无论您所在的时区如何,UNIX时间戳表示的时刻在任何地方都是相同的。当然,如果您愿意,您可以将来回转换为本地时区表示(时间1397484936是纽约的某个当地时间,或Djakarta的其他当地时间)。
上的文章http://en.wikipedia.org/wiki/Unix_time如果你想读更长的书,它会给人留下深刻印象。
Unix时间定义为自1970年1月1日星期四00:00:00协调世界时(UTC)以来经过的秒数。因此答案是no
Unix时间戳不会跨时区更改,它们是为了在全球范围内拥有标准时间而创建的。
注意:-时间戳是根据计算机中的当前时间计算的,因此在您非常确定参与机器中的时间设置之前,不要依赖它们。
有人说"UTC是格林威治标准时间,没有夏令时调整。"这完全是不真实的。GMT没有Dayllight Savings Time。格林尼治标准时间在英国格林威治(海军天文台)测量[0经度,但不是0纬度]。UTC是在赤道[0经度0纬度-恰好位于非洲海岸的海洋中]测量的。
这有什么区别?它在"一天中的什么时候?"方面没有什么区别,但在计算一年方面却有区别。现在你会认为一年是根据地球中心(核心)的位置来测量的,对吧?当地核回到大约365天前的位置时,已经一年了。它不是这样衡量的。它是通过地球上的一个特定位置回到大约365天前的同一位置(相对于太阳)来测量的。但是一天和一年的时间并不平均。一旦地球回到一年前的位置,地球就不再朝向去年的方向,所以地球上的那个点也不再朝向一年前。再往北一点,格林尼治就不会回到去年0 Lat/0 Long的同一时间点(相对于太阳)。因此,如果你把定义建立在Greenwith与0/0的基础上,你会对"一年中有多少天"这个问题得到一个略有不同的答案。换句话说,当地球上的一个特定点回到一年前的位置(相对于太阳)时,地核与一年前不在同一个位置,所以你选择什么点很重要,因为如果你在地球上选择不同的点,地核将处于与一年前不同的位置(相对太阳)。
UTC和GMT都没有夏令时。格林尼治所在的欧洲/伦敦时间。但GMT没有。GMT是美国人所说的"标准时间",即没有夏令时。
回到问题上来,大纪元时间从技术上讲没有时区。它是基于一个特定的时间点,恰好与"偶数"UTC时间(一年和十年的确切开始,等等)对齐。如果这个概念在你的大脑中不太合适,如果它有助于将大纪元时间想象为UTC,那就继续吧。你有一个很好的伙伴,在大局中,这真的无关紧要。你见过索莫恩被判1美元的法律诉讼吗。这是一种"你是对的,但这并不重要"的判决。如果有人因为你说Epoch时间在UTC时区而起诉你,他们将赢得1美元。这不会在这个星球上任何时区的任何星巴克为他们买一杯咖啡。
如果两台计算机都正确设置了时钟,并将其时钟设置为正确的时区和UTC值,则它们应该返回相同的值。
当然,这是一个很大的IF。几乎可以肯定的是,两台计算机报告的时间之间至少有一秒钟的差异,通常是几分钟。许多计算机被设置为时区设置不正确,当被要求提供时间戳而不是UTC时,它们会报告本地时间。
这就是理论和实践之间的区别。理论上一切都是一样的,在实践中你不应该依赖它。
不,epoch时间戳不应该改变,因为它有一个固定的时区,即UTC。
如果您想在其他时区使用时间对象,只需在您使用的语言库中查找它,但请不要尝试添加/减去epoch时间戳后的几个小时,并假设它在另一个时区,这会让其他人非常困惑,尤其是当您在API中公开它时。
如果你使用C++,我推荐这个库。我听说它很快就会被添加到标准库中。
毕竟,我知道有时时间对象很难处理,而且在epoch时间戳上添加/子字符串看起来更容易。请不要这样做,也不要说服别人这样做。一旦你习惯了时间对象,它就会变得容易得多,而且可以很容易地处理时区转换,而不会因为政治/法律等原因而干扰历史时区的变化。
我只是在分享我对此的看法,如果我错了,请纠正我。
只有时间戳不足以将任何时间戳转换为特定时区的DateTime。我们需要时间戳&;timezone,将时间戳转换为所需时区的日期时间。
- 将时间戳转换为本地日期时间
- 从本地日期获取UTC时间时区时间(请检查生成此时间戳数据的服务器时区设置)
- 一旦获得UTC时间,就可以将其转换为特定时区的任何日期时间。例如,悉尼比UTC时间提前了10个小时。如果服务器时区=UTC,只需根据所需时区从时间戳数据中添加/减去这些小时(不要忘记将这些小时转换为秒)
所以基本上你需要知道时间戳和&时区信息,将其转换为所需时区的DateTime。