Java 8 日期时间 API
Java 8 时间 API:
- Instant
- Duration
- LocalDate
- LocalDateTime
- LocalTime
- ZonedDateTime
- DateTimeFormatter
Instant
Instant 表示某个时刻,表示从1970-01-01至今的秒数和纳秒数。
Instant API 使用示例:
// 1. 创建Instant对象
Instant instant = Instant.now();
Instant instant = Instant.ofEpochMilli(System.currentTimeMillis())
// 2. API
// 获取1970-01-01到现在的秒数
instant.getEpochSecond();
// 获取当前秒数的纳秒数
instant.getNano();
// 3. 时间计算
Instant i5s = instant.plusSeconds(5);
Instant i_5s = instant.minusSeconds(5);
需要注意的是:新API的日期时间都是不变的,时间计算返回的是新的值,原始值保持不变。
Duration
Duration 表示某段时长,即从一个时刻到另一个时刻的时长。
Duration API使用示例:
// 1. 计算两个时刻的时长
Instant first = Instant.now();
Instant second = first.plusSeconds(35);
Duration duration = Duration.between(first, second);
// 2. 创建时长 ofXxx
Duration duration = Duration.ofSeconds(5);
// 3. 转化时长 toXxx
long ms = duration .toMillis();
// 4. 时间计算,跟Instant一样
Duration 在超时参数使用上很有用,再也不用关注超时参数用单位是啥。
LocalDate
LocalDate 表示日期,不包含时间,也没有时区信息。
LocalDate API使用示例:
// 1. 创建LocalDate
LocalDate d = LocalDate.now();
LocalDate d = LocalDate.parse("2021-07-03", DateTimeFormatter.ofPattern("yyyy-MM-dd"));
LocalDate d = LocalDate.of(2021, 7, 2);
// 2. 调用API
d.getYear();
d.getMonthValue();
d.getDayOfMonth();
d.getDayOfWeek();
// 3. 格式化
DateTimeFormatter.ofPattern("yyyy-MM-dd").format(d)
// 4. 时间计算,跟Instant一样
// 5. 时间比较
d.isBefore(LocalDate.now());
d.isAfter(LocalDate.now());
d.isEqual(LocalDate.now());
LocalDateTime
LocalDateTime 表示日期时间,包含日期和时间,但没有时区信息。
LocalDateTime API使用示例:
// 1. 创建LocalDate
LocalDateTime dt = LocalDateTime.now();
LocalDateTime dt = LocalDateTime.parse("2021-07-03 11:22:33.8", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));
LocalDateTime dt = LocalDateTime.of(2021, 7, 2, 11, 22, 33, 8);
// 2. API
dt.getYear();
dt.getMonthValue();
dt.getDayOfMonth();
dt.getHour();
dt.getMinute();
dt.getSecond();
dt.getNano();
// 3. 格式化、时间计算、时间比较跟LocalDate一样。
LocalTime
LocalTime 表示时间,表示某天的某个时间,没有时区信息
LocalTime API使用示例:
// 1. 创建LocalTime
LocalTime t = LocalTime.now();
LocalTime t = LocalTime.parse("12:23:55", DateTimeFormatter.ofPattern("HH:mm:ss"));
LocalTime t = LocalTime.of(0, 7, 2);
// 2. 调用API
t.getHour();
t.getMinute();
t.getSecond();
t.getNano();
// 3. 格式化、时间计算、时间比较跟LocalDate一样。
ZonedDateTime
ZonedDateTime 跟LocalDateTime类似都是表示日期和时间,但是不同的是,ZonedDateTime是携带时区信息的。
ZonedDateTime API使用示例:
// 1.创建ZoneDateTime
ZonedDateTime dt = ZonedDateTime.now();
// 2. 调用API
dt.getYear();
dt.getMonthValue();
dt.getDayOfMonth();
dt.getDayOfWeek();
dt.getHour();
dt.getMinute();
dt.getSecond();
// 3. 格式化、时间计算、时间比较跟LocalDate一样。
// 4. 获取时区信息
dt.getZone();
dt.getOffset();
DateTimeFormatter
DateTimeFormatter 是一个用于格式化日期或时间为字符串形式的工具
DateTimeFormatter API使用示例:
// 时间转字符串
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(ZonedDateTime.now());
// 字符串转时间
LocalDateTime dt = LocalDateTime.parse("2021-07-03 11:22:33.8", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.S"));
Date和新API的转化
Date API和新日期API的转化有两个桥梁:
(1). Instant
(2). ZoneId
Date新增了两个API用于对接新API:
(1). toInstant();
(2). from();
LocalDateTime dt = LocalDateTime.from(new Date().toInstant().atZone(ZoneId.systemDefault()));
System.out.println(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(dt));
Date d = Date.from(Instant.from(dt.atZone(ZoneId.systemDefault())));
ystem.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(d));
注意:不管是从Date转化为LocalDateTime,还是从LocalDateTime转化为Date都要指定时区信息。
本文来自博客园,作者:HiIT青年,原文链接:https://www.cnblogs.com/itqn/p/14969268.html,禁止转载。
更多文章可以扫描小程序码进行查看,下面是小程序部分文章列表截图。