2011-01-27 124 views
5

我正在为我们的应用程序设置标准。使用什么系统默认日期格式?

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

它应该是:

  • 国际&时区意识到,格式应能代表用户本地时间
  • 可以通过SimpleDataFormat有效地解析(或相似的,只是JDK类)
  • 编程语言不可知(可以解析java,python,上帝禁止C++ :)等)
  • 最好基于ISO或其他接受的标准
  • 易于通过HTTP进行通信(如果出现这种需要,这种性质JSON或YAML或东西)
  • 可以代表时间缩短到秒分辨率(更精确越好,微秒如果可能的话)。
  • 人类可读是一个加号,但并不要求
  • Compact是一个加号,但并不要求

谢谢
马克西姆。

+3

相关:http://stackoverflow.com/questions/2532729/daylight-saving-time-and-timezone-best-practices – BalusC 2011-01-27 21:48:13

回答

1

最规范和标准的方式可能就是"Unix Time":自1月1日午夜协调世界时(UTC)过去的秒数,1970年

如果设置为默认的时间格式,你可以很容易地解析它,将它存储在内存中,写入磁盘,通过HTTP轻松传递它等等。这也是一个公认的标准,从某种意义上说它是“时区意识”,因为它是定义良好的,而不管时区如何。

(这是我一直保存我所有的时间标记的格式;在数据库,内存,磁盘,...)

+0

是的,但我想能够代表用户当地时间。所以我必须在格式中加入时区。我会更新这个问题来表示这一点。 – 2011-01-27 22:18:39

7

YYYY-MM-DDTHH:MMZ(见ISO 8601)您可以添加秒等

您可以轻松地阅读它,它不会是SimpleDateFormat的一个问题。

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,我从来没有见过,现在已经收藏。