时间戳应该始终使用UTC吗?

its*_*_me 8 timestamp utc google-search

时间戳应该始终使用UTC(如在2012-06-14T10:32:11+00:00)而不是本地时间(如2012-06-14T06:32:11-04:00纽约)吗?

参考

  1. 虽然不是一个WordPress的问题,我相信这将是一个良好的榜样- WordPress的核心,由核心开发者开发主题和插件,如果一个地方输出时间戳,似乎总是使用类似get_the_date('c');get_the_modified_date('c');-它总是输出时间戳UTC ,如在2012-06-14T10:32:11+00:00.

  2. 我刚刚看到这个答案,它简单地说"时间戳使用UTC".

这个问题

如果时间戳是UTC或者是它只是一个推荐的做法?(这两者之间存在很大差异.)基本上是这样的 - 2012-06-14T06:32:11-04:00- 错了?怎么2012-06-14T10:32:11+00:00更好?

tjg*_*184 12

时间戳当然应该以UTC格式存储.格式化日期的方式取决于该时区的要求.时间戳通常以UTC格式存储,因此显示到其他时区的转换更容易且可行.

通过仅在数据库中将时间戳存储为UTC,您可以有效地使时区成为视图关注点.关于时间比较的所有数学和逻辑都可以假设在世界范围内同步.剩下的只是一个客户知道它在哪里,规则是什么,然后只是吐出结果的问题.例如,通过Chrome开发人员控制台在JavaScript中:

var dateObj = new Date();

console.log(dateObj);
//spits out local time
//if you and 23 other people in every time zone across the planet created
//a date object simultaneously you'd all see a different number
//adapted to your local time zones

var utcInMillis = dateObj.getTime();
//gives UTC in milliseconds.

console.log(utcInMillis);
//if you and 23 other people in every time zone across the planet created
//that same date object `dateObj` simultaneously you'd see the same number

console.log(new Date().getTime() - utcInMillis);
//how many milliseconds passed since utcinMillis was recorded and now

var utcAsDateObj = new Date(utcInMillis);
console.log(utcAsDateObj);
//and that's how easy it is to restore to a date
//object from a UTC in  millisecond format
Run Code Online (Sandbox Code Playgroud)

一般来说,在有现代网络技术或类似选项的地方,最不痛苦的事情是将所有内容存储为UTC,然后将时区严格地作为表示关注点.除了在当地环境中显示某个时间之外,您不需要当地时间.

即使您在后端遇到一些愚蠢的非UTC时间戳,仍然值得在客户端使用规范化的选项,通过在入口点进行转换并在退出点以任何可能的方式转换回来.排序时区以及采用夏令时的地方以及被忽略的地方对DIY来说太麻烦了,如果你真的不得不触摸日期对象,那么它通常是不可避免的.实际上最终操纵/比较日期/时间.

没有比处理这种情况更容易的方法了,因为在将您作为本地时间吐出页面之前,所有内容都以毫秒为单位规范化为UTC.

  • 对不起疯狂的补充.刚刚在我们的代码库中碰到了一个巨大的PITA,因为有人不明白这一点,并想详细说明为什么你应该总是使用UTC或者至少类似的东西并且很容易转换为UTC进行存储/传输.如果要在!@#$ ing数据库中存储时区,请在任何日期选项上停止,删除,RTFM. (2认同)