时区格式,如何知道时区
Timezone format, how to know the timezone
我得到了以下格式的时间戳:
2017-09-27T16:19:24+0000
我怎么知道那是哪个时区?如果我使用 Java 8,DateTimeFormatter
是什么?
看起来像 ISO 8601 格式:dateTime±hhmm。这里 hhmm 与 UTC
的偏移量
表示 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:仅推荐。
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. It is not exactly the ISO 8601 ISO_OFFSET_DATE_TIME
中解释,因为偏移量应该写成 +00:00
而不是 +0000
时区与时间偏移
然后,你可以用zdt.getZone()
得到offset信息。但是,您只会得到 Offset ID:
- Z - for UTC (ISO-8601)
- +hh:mm or -hh:mm - if the seconds are zero (ISO-8601)
- +hh:mm:ss or -hh:mm:ss - if the seconds are non-zero (not ISO-8601)
正如一条评论所说,请注意时间偏移量不是时区:给定时区(例如法国时间)全年没有相同的偏移量(夏令时 vs 冬令时)。
给定的时间戳有一个时区偏移量 (+0000
),表示距 GMT+00 +00 小时 +00 分钟。
对于 SimpleDateFormat and DateTimeFormatter 的 ofPattern
方法,此时区模式可以由字符 Z
表示。
您正在处理的时区可以用 yyyy-MM-dd'T'HH:mm:ssZ
:
的模式表示
yyyy
表示当前年份
MM
代表当年的月份
dd
代表当月的今天
'T'
代表一个带引号的 T
字符
HH
表示当天的当前小时
mm
表示当前小时的当前分钟
ss
表示当前分钟的当前秒数
Z
表示与 GMT 的时区偏移量
我得到了以下格式的时间戳:
2017-09-27T16:19:24+0000
我怎么知道那是哪个时区?如果我使用 Java 8,DateTimeFormatter
是什么?
看起来像 ISO 8601 格式:dateTime±hhmm。这里 hhmm 与 UTC
的偏移量表示 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:仅推荐。
ZonedDateTime
正如您所说的使用 Java 8,您可以通过使用
来利用 ZonedDateTimeZonedDateTime zdt = ZonedDateTime.parse("2017-09-27T16:19:24+0000", DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ")
解析规则在 DateTimeFormatter documentation. It is not exactly the ISO 8601 ISO_OFFSET_DATE_TIME
中解释,因为偏移量应该写成 +00:00
而不是 +0000
时区与时间偏移
然后,你可以用zdt.getZone()
得到offset信息。但是,您只会得到 Offset ID:
- Z - for UTC (ISO-8601)
- +hh:mm or -hh:mm - if the seconds are zero (ISO-8601)
- +hh:mm:ss or -hh:mm:ss - if the seconds are non-zero (not ISO-8601)
正如一条评论所说,请注意时间偏移量不是时区:给定时区(例如法国时间)全年没有相同的偏移量(夏令时 vs 冬令时)。
给定的时间戳有一个时区偏移量 (+0000
),表示距 GMT+00 +00 小时 +00 分钟。
对于 SimpleDateFormat and DateTimeFormatter 的 ofPattern
方法,此时区模式可以由字符 Z
表示。
您正在处理的时区可以用 yyyy-MM-dd'T'HH:mm:ssZ
:
yyyy
表示当前年份MM
代表当年的月份dd
代表当月的今天'T'
代表一个带引号的T
字符HH
表示当天的当前小时mm
表示当前小时的当前分钟ss
表示当前分钟的当前秒数Z
表示与 GMT 的时区偏移量