使用什么系统默认日期格式?

时间:2011-01-27 21:37:16

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

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

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

应该是:

  • 国际化&时区知道,格式应该能够代表用户本地时间
  • 可以通过SimpleDataFormat(或类似的,仅jdk类)
  • 进行有效解析
  • 编程语言不可知(可以解析java,python,上帝禁止C ++ :)和co。)
  • 优选基于ISO或其他公认标准
  • 易于通过HTTP进行通信(如果需要,JSON或YAML或其他类似的东西)
  • 可以表示时间到秒的分辨率(越精确越好,如果可能的话,微秒)。
  • 人类可读是一个加号,但不是必需的
  • Compact是一个加号但不是必需的

谢谢你,
格言。

3 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:1)

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

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

(这是我总是存储所有时间戳的格式;在数据库,内存,磁盘上......)

答案 2 :(得分:1)

“正确”默认格式实际上取决于您正在使用它做什么。解析,存储和显示的格式都可以不同。

对于存储日期,您(几乎)总是希望使用UTC作为aioobe说,即使您想在用户当地时间显示它。我说“(差不多)”,但我真的想不到一个案例,我希望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,现在已经被收藏了。