我得到了一个以以下格式表示的时间戳:
2017-09-27T16:19:24+0000
我如何知道那是哪个时区?如果我使用Java 8,DateTimeFormatter
是什么?
我得到了一个以以下格式表示的时间戳:
2017-09-27T16:19:24+0000
我如何知道那是哪个时区?如果我使用Java 8,DateTimeFormatter
是什么?
ZonedDateTime
如果您使用Java 8,可以通过以下方式利用ZonedDateTime:
ZonedDateTime zdt = ZonedDateTime.parse("2017-09-27T16:19:24+0000", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ")
解析规则在DateTimeFormatter文档中有说明。它与ISO 8601 ISO_OFFSET_DATE_TIME
不完全相同,因为偏移量应该写成+00:00
而不是+0000
时区 vs 时间偏移
然后,您可以使用zdt.getZone()
获取偏移量信息。但是,您只会得到偏移ID:
- Z-对于UTC(ISO-8601)
- +hh:mm或-hh:mm-如果秒为零(ISO-8601)
- +hh:mm:ss或-hh:mm:ss-如果秒数非零(不是ISO-8601)
正如一位评论所说,要注意时间偏移不等同于时区:某个特定的时区(例如法国时间)在整年中的偏移量并不相同(夏令时和冬令时不同)。
OffsetDateTime
。 - user7605325+0000
),表示距离GMT+00的+00小时和+00分钟。Z
表示,适用于SimpleDateFormat和DateTimeFormatter的ofPattern
方法。yyyy-MM-dd'T'HH:mm:ssZ
的模式表示:
yyyy
表示当前年份MM
表示当前年份的月份dd
表示当前月份的日期'T'
表示一个带引号的T
字符HH
表示当天的当前小时数mm
表示当前小时的当前分钟数ss
表示当前分钟的当前秒数Z
表示距离GMT的时区偏移量表示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:仅建议。