时区格式,如何知道时区

时间:2017-09-29 09:04:06

标签: java java-8 timezone timezone-offset

我得到了以下格式的时间戳:

2017-09-27T16:19:24+0000

我如何知道哪个时区是?如果我使用Java 8,那么DateTimeFormatter是什么?

4 个答案:

答案 0 :(得分:3)

<强> ZonedDateTime

正如您所说的使用Java 8,您可以使用

来利用ZonedDateTime
ZonedDateTime zdt = ZonedDateTime.parse("2017-09-27T16:19:24+0000", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ")

解析规则在DateTimeFormatter documentation中解释。它不是ISO 8601 ISO_OFFSET_DATE_TIME,因为偏移量应该写为+00:00而不是+0000

时区与时间偏移

然后,您可以使用zdt.getZone()获取偏移信息。但是,您只能获得Offset ID

  
      
  • Z - for UTC(ISO-8601)
  •   
  • + hh:mm或-hh:mm - 如果秒数为零(ISO-8601)
  •   
  • + hh:mm:ss或-hh:mm:ss - 如果秒数非零(不是ISO-8601)
  •   

正如一条评论所说,小心时间偏移不是时区:给定时区(例如法国时间)全年没有相同的偏移量(夏季时间与冬季时间相比) )。

答案 1 :(得分:1)

它看起来像ISO 8601格式:dateTime±hhmm。这里hhmm偏离UTC

答案 2 :(得分:1)

表示2017-09-27T16:19:24 + 0000给出+0000基线UTC。

时间戳本身和LocalDateTime包含很长的秒数,并且不包含单独的时区信息。

Java提供class that maintains an addition time zone

ZonedDateTime dt = LocalDateTime.now().atZone(ZoneId.of("Europe/Sofia"));

需要确保时间存储为UTC,+ 0000:仅限推荐。

答案 3 :(得分:1)

给定的时间戳有一个时区偏移量(+0000),表示距GMT + 00 + 00小时+00分钟。

此时区模式可以由SimpleDateFormatDateTimeFormatter Z方法的字符ofPattern表示。

您正在处理的时区可以用yyyy-MM-dd'T'HH:mm:ssZ

的模式表示
  • yyyy代表当前年度
  • MM代表当年的月份
  • dd代表当月的当前日期
  • 'T'代表引用的T字符
  • HH代表当天的当前小时
  • mm代表当前时段的当前分钟
  • ss代表当前分钟的当前秒数
  • Z表示与GMT
  • 的时区偏移量