欢迎访问宙启技术站
智能推送

Java中的日期和时间函数:LocalDate,LocalDateTime等

发布时间:2023-06-25 04:29:40

Java中的日期和时间函数主要包括LocalDate、LocalDateTime、Instant、Duration等类,用来处理日期、时间等相关信息。下文将从四个方面对这些类进行介绍。

一、LocalDate

LocalDate类表示不带时区的日期,用于表示年月日信息。它提供了许多方法来对日期进行操作,如获取年月日、计算两个日期之间的天数等。

创建LocalDate对象的方式有多种,可以使用of()方法、parse()方法等。

例如,通过of()方法创建LocalDate对象:

LocalDate date = LocalDate.of(2021, 5, 1);

通过parse()方法创建LocalDate对象:

LocalDate date = LocalDate.parse("2021-05-01");

常用的LocalDate方法如下:

// 获取年份
int year = date.getYear();
// 获取月份
int month = date.getMonthValue();
// 获取月份枚举类型
Month monthEnum = date.getMonth();
// 获取日
int day = date.getDayOfMonth();
// 获取星期几
DayOfWeek dayOfWeek = date.getDayOfWeek();
// 获取年中的第几天
int dayOfYear = date.getDayOfYear();
// 比较两个日期是否相等
boolean isEqual = date.isEqual(LocalDate.of(2021, 5, 1));
// 计算两个日期之间相差的天数
long daysBetween = ChronoUnit.DAYS.between(LocalDate.of(2021, 5, 1), LocalDate.now());
// 判断是否是闰年
boolean isLeapYear = date.isLeapYear();
// LocalDate加减操作(例如加一天)
LocalDate newDate = date.plusDays(1);

二、LocalDateTime

LocalDateTime类表示带时区的日期时间,包含年月日、时分秒等信息。它是LocalDate和LocalTime的组合。LocalDateTime类提供了很多方法来处理日期时间,例如计算两个时间之间的差、日期时间格式化等。

LocalDateTime的创建方式有多种,可以使用of()方法、parse()方法等。

例如,通过of()方法创建LocalDateTime对象:

LocalDateTime dateTime = LocalDateTime.of(2021, 5, 1, 12, 0, 0);

通过parse()方法创建LocalDateTime对象:

LocalDateTime dateTime = LocalDateTime.parse("2021-05-01T12:00:00");

常用的LocalDateTime方法如下:

// 获取年份
int year = dateTime.getYear();
// 获取月份
int month = dateTime.getMonthValue();
// 获取月份枚举类型
Month monthEnum = dateTime.getMonth();
// 获取日
int day = dateTime.getDayOfMonth();
// 获取星期几
DayOfWeek dayOfWeek = dateTime.getDayOfWeek();
// 获取年中的第几天
int dayOfYear = dateTime.getDayOfYear();
// 获取小时
int hour = dateTime.getHour();
// 获取分钟
int minute = dateTime.getMinute();
// 获取秒数
int second = dateTime.getSecond();
// 比较两个时间是否相等
boolean isEqual = dateTime.isEqual(LocalDateTime.of(2021, 5, 1, 12, 0, 0));
// 计算两个时间之间相差的小时数
long hoursBetween = ChronoUnit.HOURS.between(LocalDateTime.of(2021, 5, 1, 12, 0, 0), LocalDateTime.now());
// 格式化日期时间
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter);

三、Instant

Instant类表示一个精确的时间点,它是以Unix时间(从1970年1月1日开始的秒数)来表示的。Instant类比较适用于涉及到比较时间点的操作。

Instant的创建方式有多种,可以使用now()方法、ofEpochSecond()方法等。

例如,通过now()方法创建Instant对象:

Instant instant = Instant.now();

通过ofEpochSecond()方法创建Instant对象:

Instant instant = Instant.ofEpochSecond(1621369143);

常用的Instant方法如下:

// 获取Unix时间戳
long timestamp = instant.getEpochSecond();
// 比较两个时间点的先后关系
int compareResult = instant.compareTo(Instant.now());
// 计算两个时间点相差的秒数
long secondsBetween = ChronoUnit.SECONDS.between(instant, Instant.now());

四、Duration

Duration类用来处理两个时间之间的差,它表示一个时间段的长度,可以精确到纳秒级别。Duration类比较适用于涉及到计算时间间隔的操作。

Duration的创建方式有多种,可以使用between()方法、of()方法等。

例如,通过between()方法创建Duration对象:

Duration duration = Duration.between(LocalDateTime.of(2021, 5, 1, 12, 0, 0), LocalDateTime.now());

通过of()方法创建Duration对象:

Duration duration = Duration.ofHours(1);

常用的Duration方法如下:

// 获取持续的天数
long days = duration.toDays();
// 获取持续的小时数
long hours = duration.toHours();
// 获取持续的分钟数
long minutes = duration.toMinutes();
// 获取持续的秒数
long seconds = duration.getSeconds();
// 获取持续的毫秒数
long millis = duration.toMillis();