【问题标题】:Should timestamps always use UTC?时间戳是否应该始终使用 UTC?
【发布时间】:2012-06-17 18:47:41
【问题描述】:

时间戳是否应该始终使用 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. 我刚刚遇到this answer,它只是说“时间戳使用 UTC。”

问题

应该时间戳采用 UTC 还是只是推荐的做法? (两者之间有很多区别。)本质上是这样的——2012-06-14T06:32:11-04:00——错了吗? 2012-06-14T10:32:11+00:00 怎么样?

【问题讨论】:

    标签: timestamp utc google-search


    【解决方案1】:

    时间戳当然应该以 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); 控制台.log(utcAsDateObj); //这就是恢复到日期是多么容易 //来自UTC的毫秒格式的对象

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

    即使您在后端遇到了一些愚蠢的非 UTC 时间戳,仍然值得通过在入口点转换并通过任何方式在出口点转换回客户端使 UTC 成为您的规范化选项可能的。整理出时区以及在哪些地方采用夏令时以及在哪些地方忽略它对 DIY 来说太混乱了,如果你真的必须触摸你需要变得更花哨的日期对象,这通常是不可避免的最终实际操作/比较日期/时间。

    没有更简单的方法来处理这个问题,而不是在您将其作为当地时间在页面上吐出之前以毫秒为单位将所有内容规范化为 UTC。

    【讨论】:

    • 你没有回答我的第二个问题。你能重新看一下吗? (如果不是故意的)
    • 糟糕,忽略了那个。我不确定我是否理解这个问题。
    • 抱歉添加了疯狂的东西。刚刚在我们的代码库中遇到了一个巨大的 PITA,因为有人不理解这一点,并想详细说明为什么你应该总是使用 UTC 或至少类似且易于转换为 UTC 进行存储/传输的东西。如果您在 !@#$ing 数据库中存储时区,请在您拥有的任何日期选项中停止、删除、RTFM。
    • 实际上,您的数据库中的时区可能有正当理由,但绝不会比较两个不同区域设置之间的存储时间。这简直是​​蝙蝠鸟五彩纸屑疯狂。
    猜你喜欢
    • 2013-02-18
    • 2016-02-16
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 2011-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    相关资源
    最近更新 更多