【问题标题】:What system default date format to use?使用什么系统默认日期格式?
【发布时间】:2011-06-16 20:51:05
【问题描述】:

我正在为我们的应用设定标准。

我一直在想,我应该选择使用什么默认日期格式?

应该是:

  • 国际化和时区感知,格式应该能够代表用户本地时间
  • 可以被 SimpleDataFormat(或类似的,仅限 jdk 类)高效解析
  • 与编程语言无关(可以在 java、python、god forbid C++ 中解析 :) 和 co。)
  • 最好是基于 ISO 或其他公认的标准
  • 通过 HTTP 轻松通信(如果需要,JSON 或 YAML 或类似的东西)
  • 可以将时间表示为秒级分辨率(越精确越好,如果可能,为微秒级)。
  • 人类可读是加分项,但不是必需的
  • 紧凑是加分项,但不是必需的

谢谢你,
马克西姆。

【问题讨论】:

标签: java datetime standards datetime-format datetime-parsing


【解决方案1】:

yyyy-MM-ddThh:mmZ(见ISO 8601)您可以添加秒等

您可以轻松阅读,SimpleDateFormat 不会有问题。

【讨论】:

    【解决方案2】:

    最规范和标准的形式可能是"Unix Time":自 1970 年 1 月 1 日协调世界时 (UTC) 午夜以来经过的秒数。

    如果您将其设置为默认时间格式,您可以轻松地对其进行解析、将其存储在内存中、将其写入磁盘、通过 HTTP 轻松地进行通信等等。它也绝对是一个公认的标准,从某种意义上说,它是“时区感知”的,因为它的定义明确,与时区无关。

    (这是我始终存储所有时间戳的格式;在数据库中、内存中、磁盘上……)

    【讨论】:

    • 是的,但我希望能够代表用户当地时间。所以我必须在格式中包含时区。我也会更新问题来代表这一点。
    【解决方案3】:

    “正确的”默认格式真的取决于你用它做什么。解析、存储和显示的格式都可以不同。

    为了存储日期,您(几乎)总是想要使用 aioobe 所说的 UTC,即使您想在用户本地时间显示它也是如此。我说“(几乎)”,但我真的想不出我会希望UTC作为保存日期的情况。您可能还希望存储日期起源的 TZ 信息,以便您可以在该本地时间报告它,但更多情况下您希望为当前的人显示本地时间查看日期。这意味着有一种方法可以确定当前用户的本地时间,而不管原始本地时间是什么。

    为了显示它,“默认格式”通常应由查看器的区域设置确定。 08/09/10 在美国通常表示 2010 年 8 月 9 日(“Middle endian”),但在世界其他大部分地区通常表示 2010 年 9 月 8 日(“Little endian”)。 ISO-8601 格式“2010-09-10”是安全且明确的,但通常不是人们期望看到的。您也可以在互联网上查看RFC-3339 获取日期和时间,查看RFC-2822 获取消息格式(传输日期)

    为了解析日期,您需要对其进行解析并将其转换为 UTC,但您应该对接受的内容相当灵活。同样,最终用户区域设置和时区(如果可发现)可以帮助您确定要接受哪种格式的字符串作为输入。这是假设用户键入的字符串。如果您正在生成日期/时间戳,您可以控制表单并且解析不会有问题。

    我也是第二个BalusC link,我以前没见过,现在已经收藏了。

    【讨论】:

      猜你喜欢
      • 2016-07-03
      • 2020-01-08
      • 2018-02-12
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-24
      • 2019-03-13
      相关资源
      最近更新 更多