当冬季开始时,出现模棱两可的额外小时的标准方法是什么?
到目前为止,我使用本地时间格式显示和解析日期和时间。例如。1. January 2014, 15:27
。
我正在使用基于位置的时区,例如"欧洲/柏林"。而且我不能只是更改为普通的GMT偏移量,因为我确实需要在日期进行计算。否则,我会在跨DST更改日期移动时会得到错误的绝对时间。
所有这些都很好,除了DST结束时的一小时(例如2014年10月26日,上午2点至凌晨3点)。我需要以稍后可以再次解析的方式提出它。
是否有标准格式?我只添加一个自定义符号吗?我是否还在地理时区使用GMT偏移?我怎么知道使用这种特殊格式 - 因为我不想一直打印它,因为它是一年中的大部分时间。
马特·约翰逊(Matt Johnson)的答案是正确且有见地的。
Java 8&Java.Time。*
让我从新的java.time中添加另一个列表。
Java.Time.ZonedDateTime使用的默认值是使用方括号在时区名称且没有空格的串联字符串。
2014-10-26T13:49:48.278 01:00 [欧洲/柏林]
@mattjohnson如果您愿意,请随时将此答案的内容合并。
没有标准将所有内容结合在一起。您可以获得的最接近的是两个字段。一个将是ISO8601/RFC3339日期 时间 偏移,另一个将是IANA/OLSON时区。
根据您的平台,您可能会有一个代表同时代表的单个对象,例如joda time中的 DateTime
或noda time中的 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" }
-
AS 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>
这些都可以接受。选择适合您情况的一种或适应类似的事物。
关于您的问题:
...我怎么知道什么时候使用这种特殊格式...
当您录制已经过去并且无法更改的事件时,您就不需要存储时区。日期 时间 偏移值仅足够。否则,您都需要两个。