使用哪种系统默认日期格式?

7

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

我一直在想,应该选择哪种默认日期格式呢?

它应该是:

  • 国际化和时区感知的,格式应该能够表示用户的本地时间
  • 可以被SimpleDateFormat (或类似的,仅限jdk类) 高效解析
  • 编程语言无关的(可以在Java、Python、C++等中解析)
  • 最好基于ISO或其他公认的标准
  • 易于通过HTTP进行通信(如果需要的话,JSON或YAML或类似的格式)
  • 可以表示到秒分辨率(越精确越好,如果可能的话,甚至可以支持微秒)。
  • 人类可读性是一个优点,但不是必须的
  • 紧凑性是一个优点,但不是必须的

谢谢,
Maxim.


3
相关链接:https://dev59.com/U3E85IYBdhLWcg3w8IbK - BalusC
3个回答

8

yyyy-MM-ddThh:mmZ (详见ISO 8601)。您可以添加秒等其他信息。

这个日期格式对于SimpleDateFormat来说很容易读取,不会有任何问题。


1

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

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

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


是的,但我想要能够表示用户本地时间。因此,我必须在格式中包含时区。我也会更新问题以反映这一点。 - Maxim Veksler

1

“正确”的默认格式取决于您对其的使用。解析、存储和显示的格式都可以不同。

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

在显示它时,“默认格式”通常应由观众的语言环境确定。在美国,“08/09/10”通常表示2010年8月9日(“中端字节序”),但在世界上大多数其他地方,它通常表示2010年9月8日(“小端字节序”)。ISO-8601格式“2010-09-10”是安全和明确的,但通常不是人们希望看到的。您还可以查看RFC-3339以获取互联网上的日期和时间,以及RFC-2822以获取消息格式(传输日期)。

对于解析日期,您需要将其解析并转换为UTC,但是您应该对接受的格式相当灵活。同样,如果可以确定最终用户的语言环境和时区,则可以帮助您确定要接受哪些字符串格式作为输入。这假定是用户键入的字符串。如果您正在生成日期/时间戳,则可以控制其格式,解析将不成问题。

我还赞同BalusC link,这是我之前没有看到过的,现在已经收藏了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接