【问题标题】:Can someone identify this datetime format?有人可以识别这种日期时间格式吗?
【发布时间】:2017-07-29 21:47:50
【问题描述】:

IMAP 服务器正在向我发送如下所示的时间戳:

2016 年 4 月 12 日星期二 09:45:14 GMT-0500 (CDT)

我已经在足够多的地方多次看到这种格式,让我觉得它是标准化的。但我不知道标准的名称是什么。

它与电子邮件的 RFC 5322 日期时间格式非常相似(我的第一个猜测,因为我使用的是 IMAP 服务器),但不完全一样。

有人认识吗?

编辑:根据 MDN,显然这也是 JavaScript 的 Date.prototype.toString() 的标准格式。我在不相关的上下文(JS/IMAP)的多个地方看到的事实让我认为它必须是某种标准。还是找不到它的名字。

【问题讨论】:

  • 这永远不会成为国际标准,因为它将月份放在一天之前。至少,上帝,不要让它成为标准
  • 对;如果它是一个标准,它是旧的东西。我只是想到了另一个我见过的地方:Ubuntu 上 Chromium 中的 Date.prototype.toString() 输出完全相同的格式......不过,不确定 Chromium 是否从语言环境信息中获取。

标签: time date format


【解决方案1】:

与大多数 SO 答案不同,这是对失败的承认。最初我认为这是 C 库函数 asctime() - C 在 UNIX 和 Internet 上投下了很长的阴影。但正如 OP 所指出的那样,这会产生Tue Apr 12 09:45:14 2016 而不是Tue Apr 12 2016 09:45:14 GMT-0500 (CDT) 形式的东西。我应该停止关注这一点,但好奇心推动了我。

经过大量搜索,我相信该格式不是标准,而是 asctime 和 RFC 822 及其后代的混蛋。

  • asctime(和表亲,例如ctimestrftime)得到你Tue Apr 12 09:45:14 2016,所以这一年在“错误”的地方,没有偏移或区域。我怀疑后一点是环境因素,受LC_TIME 的影响。 GNU 日期的源代码似乎同意。See GNU date in the coreutils pkg source
  • RFC 822 的时间戳格式将产生Tues, 06 Apr 16 09:45:14 CDT。 RFC 2822 的努力将是Tues, 06 Apr 2016 09:45:14 -0500,修复 Y2K 问题并更清楚地了解与通用时间的偏移。 RFC 5322 也是如此。并且 (aargh) 在星期几之后引入逗号。 See RFC 822, etc.
  • RFC 1123,虽然显然不是官方标准,但仍然存在足够长的时间,Java 已将其作为标准格式。这让你 Tue, 06 Apr 2016 09:45:14 GMT 使用 RFC1123 formatter 之类的东西

此时我意识到浪费这么多时间学习时间的讽刺,以及在我什至在开始之前就知道计算机编程的时间是最具有讽刺意味的时间之一notoriously mis-understoodinconsistent 所有领域,我应该知道不要被卷入其中。让这成为你们所有人的一个教训。逃吧,我的朋友们,逃吧!

【讨论】:

  • asctime() 会产生一个类似Tue Apr 12 09:45:14 2016 的字符串,格式不一样。
  • 你的意思是因为缺少时区偏移? Asctime 肯定符合月日顺序。
  • 两个区别:缺少时区偏移和年份的位置。
  • 我认为 RFC5322/RFC822 等仅指定 3 个字符的工作日,例如 section 3.3 in 5322
猜你喜欢
  • 2014-05-11
  • 1970-01-01
  • 2011-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-20
  • 2015-10-10
相关资源
最近更新 更多