Java8的常用时间API实用指南
为什么要学习Java8时间API?
在Java8之前,我们使用java.util.Date
和java.util.Calendar
处理时间相关的操作可能会遇到一些问题。
java.util.Date
类不是线程安全的。java.util.Calendar
虽然是线程安全的,但是API使用起来可能有些麻烦,而且由于它是可变的,因此缺乏不变性。- 不同的时区之间的时间转换也会带来一些问题。
Java8为我们提供了全新的时间日期API,它设计得更加简单易用,并且解决了以上问题。本文将详细介绍Java8的常用时间API,以及如何使用它们。
Java8时间API的主要类
Java8的时间API主要由以下几个类组成:
java.time.LocalDate
:表示日期,例如“2022-05-30”。java.time.LocalTime
:表示时间,例如“12:30:00”。java.time.LocalDateTime
:表示日期时间,例如“2022-05-30T12:30:00”。java.time.ZonedDateTime
:在表示日期时间时增加了时区信息,例如“2022-05-30T12:30:00+08:00”。java.time.Instant
:表示时间戳,UNIX时间戳的精确度为纳秒。java.time.Duration
:表示时间的持续时间,例如“PT10H30M”表示10小时30分钟。java.time.Period
:表示时间的段落,例如“P1Y1M”表示1年零1个月。java.time.format.DateTimeFormatter
:日期、时间和日期时间格式化工具。
日期时间的创建和获取
创建方式
我们可以使用静态方法now()
来获取当前的日期时间:
LocalDateTime currentDateTime = LocalDateTime.now();
也可以手动创建一个日期时间对象:
LocalDateTime dateTime = LocalDateTime.of(2022, 5, 30, 12, 30, 0);
获取日期时间的各个部分
Java8的时间API提供了许多方法来获取日期时间的各个部分,例如:
LocalDateTime dateTime = LocalDateTime.of(2022, 5, 30, 12, 30, 0);
int year = dateTime.getYear(); // 2022
Month month = dateTime.getMonth(); // MAY
int dayOfMonth = dateTime.getDayOfMonth();// 30
int hour = dateTime.getHour(); // 12
int minute = dateTime.getMinute(); // 30
int second = dateTime.getSecond(); // 0
日期时间的比较
Java8的时间API还提供了比较日期时间的方法,例如:
LocalDateTime dateTime1 = LocalDateTime.of(2022, 5, 30, 12, 30, 0);
LocalDateTime dateTime2 = LocalDateTime.of(2022, 5, 31, 10, 0, 0);
boolean isBefore = dateTime1.isBefore(dateTime2); // true
boolean isAfter = dateTime1.isAfter(dateTime2); // false
日期时间的计算
加减操作
Java8的时间API提供了plus()
和minus()
两个方法来进行日期时间的加减操作:
LocalDateTime dateTime = LocalDateTime.of(2022, 5, 30, 12, 30, 0);
LocalDateTime plusHours = dateTime.plusHours(1); // 2022-05-30T13:30:00
LocalDateTime plusDays = dateTime.plusDays(1); // 2022-05-31T12:30:00
LocalDateTime minusMinutes = dateTime.minusMinutes(30); // 2022-05-30T12:00:00
TemporalAmount
Java8的时间API还提供了TemporalAmount
接口来表示时间的段落,例如Duration
和Period
类。
LocalDateTime dateTime = LocalDateTime.of(2022, 5, 30, 12, 30, 0);
Duration duration = Duration.ofHours(1);
LocalDateTime plusDuration = dateTime.plus(duration); // 2022-05-30T13:30:00
Period period = Period.ofDays(1);
LocalDateTime plusPeriod = dateTime.plus(period); // 2022-05-31T12:30:00
日期时间的格式化
我们可以使用DateTimeFormatter
来格式化日期时间:
LocalDateTime dateTime = LocalDateTime.of(2022, 5, 30, 12, 30, 0);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter); // 2022-05-30 12:30:00
示例
示例1:计算两个日期之间的天数
我们可以使用Period
类来计算两个日期之间的天数:
LocalDate date1 = LocalDate.of(2022, 5, 30);
LocalDate date2 = LocalDate.of(2022, 6, 2);
Period period = Period.between(date1, date2);
int days = period.getDays(); // 3
示例2:字符串转换为日期
我们可以使用LocalDateTime
类和DateTimeFormatter
类来将字符串转换为日期时间对象:
String dateString = "2022-05-30 12:30:00";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime dateTime = LocalDateTime.parse(dateString, formatter);
总结
在本文中,我们详细介绍了Java8的常用时间API,包括日期时间的创建和获取、比较、计算、格式化和示例。掌握这些知识有助于我们更加方便地处理时间相关的操作。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java8的常用时间api实用指南 - Python技术站