Java中的日期和时间函数:LocalDate,LocalDateTime等
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();
