Java 8 日期和时间 API
原文:https://www.studytonight.com/java-8/java-8-date-and-time-api
Java 在 Java 8 版本中添加了一个新的日期和时间 API,它由几个类、接口和枚举组成,用于处理日期和时间。
在 Java 8 之前,有一个java.util.Date
类来创建和处理日期和时间,它有一些限制,比如不是线程安全的、 设计不佳、难以处理时区。
新的日期和时间 API 基于国际标准化组织日历系统,所有的类都是不可变的和线程安全的。
java.time 包的类代表主要的日期时间概念,包括瞬间、持续时间、日期、时间、时区和周期。
Java 日期时间 API 类
新的 java.time 包包括下面列出的各种类和枚举。
|
班级
|
描述
| | 时钟 | 使用时区提供当前即时、日期和时间的时钟。 | | 持续时间 | 基于时间的时间量,如“34.5 秒”。 | | 瞬间 | 时间线上的瞬间点。 | | 局部日期 | 在 ISO-8601 日历系统中没有时区的日期,如 2007-12-03。 | | LocalDateTime | 在 ISO-8601 日历系统中没有时区的日期时间,例如 2007-12-03T10:15:30。 | | LocalTime(本地时间) | 在 ISO-8601 日历系统中没有时区的时间,如 10:15:30。 | | 蒙特达伊 | ISO-8601 日历系统中的月日,如- 12-03。 | | 偏移日期时间 | 在 ISO-8601 日历系统中,从世界协调时/格林威治时间偏移的日期时间,如 2007-12-03T10:15:30+01:00。 | | 偏移时间 | 在 ISO-8601 日历系统中,从世界协调时/格林威治时间偏移的时间,如 10:15:30+01:00。 | | 时期 | ISO-8601 日历系统中基于日期的时间量,例如“2 年 3 个月 4 天”。 | | 年 | ISO-8601 日历系统中的一年,如 2007 年。 | | 年月 | ISO-8601 日历系统中的一年一月,如 2007-12。 | | ZonedDateTime | 在 ISO-8601 日历系统中带有时区的日期时间,例如 2007-12-03T10:15:30+01:00 欧洲/巴黎。 | | ZoneId | 时区标识,如欧洲/巴黎。 | | ZoneOffset(区域偏移) | 与格林威治时间/世界协调时的时区偏移量,如+02:00。 |
Java 8 日期时间 API 枚举
以下是存在于 java.time 包中的枚举。
| 列举型别 | 描述 | | 星期几 | 一周中的某一天,如“星期二”。 | | 月 | 一年中的一个月,如“六月”。 |
示例:本地日期类
该类在 java.time 包中提供。它表示在 ISO-8601 日历系统中没有时区的日期,例如 2007-12-03。
LocalDate
类是一个不可变的日期时间对象,用于创建地区日期。见下面的例子。
public class STDemo {
public static void main(String[] args){
LocalDate date = LocalDate.parse("2012-12-10");
System.out.println(date);
}
}
2012-12-10
示例:本地日期时间类
这个类用于创建一个有时间但没有时区的日期。它表示在 ISO-8601 日历系统中没有时区的日期时间,例如 2010-10-03T10:10:50。
LocalDateTime
类是一个不可变的日期时间对象,代表一个日期时间。我们可以用它来表示有时间的日期。例如,值“2007 年 10 月 2 日 13:45.30.123456789”可以存储在LocalDateTime
中。
import java.time.LocalDateTime;
public class STDemo {
public static void main(String[] args){
LocalDateTime date = LocalDateTime.of(2012, 12, 10, 2, 30);
System.out.println(date);
}
}
2012-12-10T02:30
示例:本地时间类
此类用于创建本地时间对象。它表示在 ISO-8601 日历系统中没有时区的时间,例如 11:10:30。
LocalTime
类是表示时间的不可变日期时间对象,例如“13:45.30.123456789”的值可以存储在LocalTime
中。见下面的例子。
import java.time.LocalTime;
public class STDemo {
public static void main(String[] args){
LocalTime time = LocalTime.of(12, 12,30);
System.out.println(time);
}
}
12:12:30
示例:区域数据时间类
此类用于创建带有时区的日期时间对象。它表示在 ISO-8601 日历系统中带有时区的日期时间,例如 2017-10-03T10:10:30+05:30 亚洲/加尔各答。
ZonedDateTime
类是带有时区的日期时间的不可变表示。此类存储所有日期和时间字段。例如,“亚洲/加尔各答时区 2017 年 10 月 2 日 15:40.35.123456786 +05:30”的值可以存储在ZonedDateTime
中。
import java.time.ZoneId;
import java.time.ZonedDateTime;
public class STDemo {
public static void main(String[] args){
ZonedDateTime time = ZonedDateTime.of(2015, 10, 15, 2, 10, 30, 0, ZoneId.systemDefault());
System.out.println(time);
}
}
2015-10-15T02:10:30+05:30【亚洲/加尔各答】
示例:偏移日期时间类
此类用于在 ISO-8601 日历系统中创建从世界协调时/格林威治时间偏移的日期时间,例如 2017-10-03T15:10:30+01:00。
OffsetDateTime
类是带有偏移量的日期时间的不可变表示。此类存储所有日期和时间字段,以及与世界协调时/格林威治时间的偏移量。例如,值“2017 年 10 月 2 日 15:42.35.123456789 +02:00”可以存储在OffsetDateTime
中。
import java.time.OffsetDateTime;
public class STDemo {
public static void main(String[] args){
OffsetDateTime date = OffsetDateTime.parse("2017-02-03T12:30:30+01:00");
System.out.println(date);
}
}
2017-02-03T12:30:30+01:00
示例:偏移时间类
此类用于存储在 ISO-8601 日历系统中从世界协调时/格林威治时间偏移的时间,例如 15:10:35+01:00。
OffsetTime
类是一个表示时间的不可变日期时间对象。此类存储所有时间字段以及区域偏移量。例如,值“15:40.35.123456789+02:00”可以存储在OffsetTime
中。
import java.time.OffsetTime;
public class STDemo {
public static void main(String[] args){
OffsetTime time = OffsetTime.parse("12:30:30+01:00");
System.out.println(time);
}
}
12:30:30+01:00