冬季时间开始时,提出模糊额外时间的标准方法是什么?
到目前为止,我使用本地化时间格式来显示和解析日期和时间。例如。 1. January 2014, 15:27
。
我正在使用基于位置的时区,例如“欧洲/柏林”。 而且我不能只改为普通GMT补偿,因为我确实需要对日期进行计算。否则,当在DST更改日期之间移动时,我会得到错误的绝对时间。
除了夏令时结束时的一小时(例如2014年10月26日,凌晨2点至凌晨3点)发生两次,所有这一切都正常。我需要以稍后再解析的方式呈现它。
是否有标准格式?我只是添加自定义符号吗?我是否在地理时区之外使用GMT偏移?我怎么知道何时使用这种特殊格式 - 因为我不想一直打印它,因为它在一年中的大部分时间都是多余的。
答案 0 :(得分:2)
没有一个标准可以结合所有内容。你可以得到的最近的是两个字段。一个是ISO8601 / RFC3339日期+时间+偏移量,另一个是IANA / Olson时区。
根据您的平台,您可能只有一个代表两者的对象,例如Joda-Time中的DateTime
或{{3}中的ZonedDateTime
}}。但是没有标准化的表示形式作为字符串。
以下是我见过的一些内容:
两个完全独立的字符串:
"2014-10-26T02:00:00+01:00"
"Europe/Berlin"
一个串联的字符串,空格分隔:
"2014-10-26T02:00:00+01:00 Europe/Berlin"
一个带空格的连接字符串并使用括号:
"2014-10-26T02:00:00+01:00 (Europe/Berlin)"
一个连接的字符串没有任何空格,但带有方括号:(感谢Basil)
"2014-10-26T02:00:00+01:00[Europe/Berlin]"
作为JSON,有一些预定的字段名称:
{
value: "2014-10-26T02:00:00+01:00",
zone: "Europe/Berlin"
}
作为XML,具有一些预定的属性名称:
<TimeStamp Value="2014-10-26T02:00:00+01:00" Zone="Europe/Berlin" />
作为XML,带有一些预定的元素名称:
<TimeStamp>
<Value>2014-10-26T02:00:00+01:00</Value>
<Zone>Europe/Berlin</Zone/>
</TimeStamp>
任何这些都是可以接受的。选择一个适合你情况的,或适应类似的东西。
关于你的问题:
...我怎么知道何时使用这种特殊格式...
当您录制已经通过且无法更改的事件时,您无需存储时区。仅日期+时间+偏移值就足够了。否则,你需要两者。
答案 1 :(得分:2)
answer by Matt Johnson是正确且富有洞察力的。
让我在他的列表中添加另一个,来自与java.time.* classes捆绑在一起并由Java 8定义的新JSR 310。这些新课程的灵感来自Joda-Time,但是经过重新设计。
java.time.ZonedDateTime使用的默认值是一个连接字符串,在时区名称周围使用方括号,没有空格。
2014-10-26T13:49:48.278 + 01:00 [欧洲/柏林]
@MattJohnson如果您愿意,可以随意将此答案的内容与您的内容合并。