我得到了以下格式的时间戳:
2017-09-27T16:19:24+0000
我如何知道哪个时区是?如果我使用Java 8,那么DateTimeFormatter
是什么?
答案 0 :(得分:3)
<强> ZonedDateTime 强>
正如您所说的使用Java 8,您可以使用
来利用ZonedDateTimeZonedDateTime 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分钟。
此时区模式可以由SimpleDateFormat和DateTimeFormatter Z
方法的字符ofPattern
表示。
您正在处理的时区可以用yyyy-MM-dd'T'HH:mm:ssZ
:
yyyy
代表当前年度MM
代表当年的月份dd
代表当月的当前日期'T'
代表引用的T
字符HH
代表当天的当前小时mm
代表当前时段的当前分钟ss
代表当前分钟的当前秒数Z
表示与GMT