7

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

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

它应该是:

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

谢谢你,
马克西姆。

4

3 回答 3

8

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

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

于 2011-01-27T21:51:13.147 回答
1

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

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

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

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

我还第二个我以前没见过的BalusC 链接现在已经收藏了。

于 2011-01-28T02:13:41.713 回答
1

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

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

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

于 2011-01-27T21:44:29.793 回答