㈠ java日期时间API系列19--Jdk8,ZonedDateTime和时区转换。
Java日期时间API系列6中,通过时间范围示意图,可以清晰看到ZonedDateTime是LocalDateTime与ZoneId的结合,用于处理时区相关的时间。下面将详细介绍时区相关知识,以及如何使用Java处理时区。
时区是地球上的地理区域,按照天文时区划分,全球共有24个时区。中国北京位于东8区,若英国(格林尼治天文台旧址)时间为6点,那么北京时间为14点。为统一世界时间,1884年的国际经度会议规定了零时区(GMT+00),东区和西区各为1-12个时区。GMT代表格林尼治标准时间,UTC是协调世界时,基于原子时秒长,精确度更高,作为世界标准时间使用。
计算机中UNIX时间戳,是以GMT/UTC时间“1970-01-01T00:00:00”为起点,到具体时间的秒数,不考虑闰秒,简化了计算机操作复杂度。例如,若电脑系统时间为2015年2月27日15点43分0秒,设默认时区为东8区,则0时区的时间为2015年2月27日7点43分0秒,UNIX时间戳为1425022980秒。
Java中的ZoneId为时区ID,如“Europe/Paris”。常用时区名称和缩写可通过Java获取,使用`java.time.ZoneId.getAvailableZoneIds()`方法。
ZonedDateTime是在ISO-8601日历系统中包含时区的日期时间,如“2007-12-03T10:15:30+01:00 Europe/Paris”。创建ZonedDateTime时,需传入日期和时区,转换时可使用`java.time.ZonedDateTime`类的方法。
常用时区创建和转换,如北京时间、巴黎时间、纽约时间、东京时间等。转换代码实例展示了如何将LocalDate(仅包含日期)转换为带有时区的ZonedDateTime,输出为“2020-02-19T00:00+08:00[Asia/Shanghai]”。常用时间创建和时区转换的代码实例还包括创建常用时间的ZonedDateTime,以及执行时区间的转换计算。
最后,介绍时区时间的格式化与解析。格式化代码使用了ISO常用格式化,如“yyyy-MM-dd'T'HH:mm:ssZ”。解析代码展示了如何从字符串中解析出时区时间。以上内容提供了Java处理时区的全面指南。