在冬季开始时提供模糊额外小时的最佳方式

时间:2014-01-24 12:21:54

标签: timezone dst

冬季时间开始时,提出模糊额外时间的标准方法是什么?

到目前为止,我使用本地化时间格式来显示和解析日期和时间。例如。 1. January 2014, 15:27

我正在使用基于位置的时区,例如“欧洲/柏林”。 而且我不能只改为普通GMT补偿,因为我确实需要对日期进行计算。否则,当在DST更改日期之间移动时,我会得到错误的绝对时间。

除了夏令时结束时的一小时(例如2014年10月26日,凌晨2点至凌晨3点)发生两次,所有这一切都正常。我需要以稍后再解析的方式呈现它。

是否有标准格式?我只是添加自定义符号吗?我是否在地理时区之外使用GMT偏移?我怎么知道何时使用这种特殊格式 - 因为我不想一直打印它,因为它在一年中的大部分时间都是多余的。

2 个答案:

答案 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 8&amp; java.time。*

让我在他的列表中添加另一个,来自与java.time.* classes捆绑在一起并由Java 8定义的新JSR 310。这些新课程的灵感来自Joda-Time,但是经过重新设计。

java.time.ZonedDateTime使用的默认值是一个连接字符串,在时区名称周围使用方括号,没有空格。

  

2014-10-26T13:49:48.278 + 01:00 [欧洲/柏林]


@MattJohnson如果您愿意,可以随意将此答案的内容与您的内容合并。