在 Java 中,LocalDate、LocalTime 和 LocalDateTime 是 java.time 包中的类,用于表示日期、时间和日期时间。这些类提供了不可变的日期与时间对象,是 Java 8 及以后版本中引入的一部分,用于替代旧的 java.util.Date 和 java.util.Calendar 类。
获取 LocalDate、LocalTime、LocalDateTime 实例对象:
LocalDate类、LocalTime类、LocalDateTime类都提供了静态的 now() 方法和 of() 方法,用获取实例对象。
方法 | 说明 | 示例 |
---|---|---|
now() | 获取系统当前日期/时间对应的该对象。 | LocalDate localDate = LocalDate.now(); LocalTime localTime = LocalTime.now(); LocalDateTime localDateTime = LocalDateTime.now(); |
of() | 获取指定日期/时间的对象。 | LocalDate localDate = LocalDate.of(2024, 11, 2); LocalTime localTime = LocalTime.of(16, 30, 18); LocalDateTime localDateTime = LocalDateTime.of(2024, 11, 2, 16, 30, 18); |
1、LocalDate 类
LocalDate 类表示不带时间的日期,即年、月和日。
LocalDate 类的常用方法:
方法 | 说明 |
---|---|
getYear() getMonthValue() getDayOfMonth() getDayOfYear() getDayOfWeek() | 获取日期对象中的某个信息。 |
withYear(int year) withMonth(int month) withDayOfMonth(int dayOfMonth) withDayOfYear(int dayOfYear) | 修改日期对象中的某个信息。 |
plusYears(long yearsToAdd) plusMonths(long monthsToAdd) plusDays(long daysToAdd) plusWeeks(long weeksToAdd) | 增加日期对象中的某个信息 |
minusYears(long yearsToSubtract) minusMonths(long monthsToSubtract) minusDays(long daysToSubtract) minusWeeks(long weeksToSubtract) | 减少日期对象中的某个信息。 |
equals(Object obj) isBefore(ChronoLocalDate other) isAfter(ChronoLocalDate other) | 判断两个日期对象,是否相等、在之前、还是之后。 |
format(DateTimeFormatter formatter) | 将日期对象格式化为字符串。 |
parse(CharSequence text, DateTimeFormatter formatter) | 解析字符串为日期对象。 |
【示例】使用 LocalDate 日期对象。
import java.time.LocalDate;/*** 使用 LocalDate 日期对象* @author pan_junbiao*/
@Test
public void TestLocalDate()
{// 1、创建日期对象LocalDate localDate = LocalDate.now(); //获取当前的日期对象LocalDate ofLocalDate = LocalDate.of(2099, 8, 11); //获取指定的日期对象System.out.println("获取当前的日期对象:" + localDate);System.out.println("获取指定的日期对象:" + ofLocalDate);// 2、获取日期对象中的某个信息:getYear、getMonthValue、getDayOfMonth、getDayOfYear、getDayOfWeekSystem.out.println("年:" + localDate.getYear());System.out.println("月:" + localDate.getMonthValue());System.out.println("日:" + localDate.getDayOfMonth());System.out.println("一年中的第几天:" + localDate.getDayOfYear());System.out.println("星期几:" + localDate.getDayOfWeek().getValue());// 3、修改日期对象中的某个信息:withYear、withMonth、withDayOfMonth、withDayOfYearLocalDate withLocalDate = localDate.withYear(2099).withMonth(8).withDayOfMonth(11);System.out.println("修改日期对象后:" + withLocalDate);// 4、增加日期对象中的某个信息:plusYears、plusMonths、plusDays、plusWeeksLocalDate plusLocalDate = localDate.plusDays(10);System.out.println("当前日期增加10天:" + plusLocalDate);// 5、减少日期对象中的某个信息:minusYears、minusMonths、minusDays、minusWeeks、minusWeeksLocalDate minusLocalDate = localDate.minusYears(1);System.out.println("当前日期减少1年:" + minusLocalDate);// 6、判断两个日期对象,是否相等、在之前、还是之后:equals、isBefore、isAfterSystem.out.println("判断两个日期对象是否相等:" + withLocalDate.equals(ofLocalDate));System.out.println("判断两个日期对象是否在之前:" + localDate.isBefore(ofLocalDate));System.out.println("判断两个日期对象是否在之后:" + localDate.isAfter(ofLocalDate));// 7、将日期对象格式化为字符串DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日");String localDateStr = formatter.format(localDate);System.out.println("将日期对象格式化为字符串:" + localDateStr);// 8、解析字符串为日期对象LocalDate localDateAna = LocalDate.parse(localDateStr, formatter);System.out.println("解析字符串为日期对象:" + localDateAna);
}
执行结果:
2、LocalTime 类
LocalTime 类表示不带日期的时间,即小时、分钟、秒和纳秒。
LocalTime 类的常用方法:
方法 | 说明 |
---|---|
getHour() getMinute() getSecond() getNano() | 获取时间对象中的某个信息。 |
withHour(int hour) withMinute(int minute) withSecond(int second) withNano(int nanoOfSecond) | 修改时间对象中的某个信息。 |
plusHours(long hoursToAdd) plusMinutes(long minutesToAdd) plusSeconds(long secondstoAdd) plusNanos(long nanosToAdd) | 增加时间对象中的某个信息。 |
minusHours(long hoursToSubtract) minusMinutes(long minutesToSubtract) minusSeconds(long secondsToSubtract) minusNanos(long nanosToSubtract) | 减少时间对象中的某个信息。 |
equals(Object obj) isBefore(LocalTime other) isAfter(LocalTime other) | 判断两个时间对象,是否相等、在之前、还是之后。 |
format(DateTimeFormatter formatter) | 将时间对象格式化为字符串。 |
parse(CharSequence text, DateTimeFormatter formatter) | 解析字符串为时间对象。 |
【示例】使用 LocalTime 时间对象。
import java.time.LocalTime;/*** 使用 LocalTime 时间对象* @author pan_junbiao*/
@Test
public void TestLocalTime()
{// 1、创建时间对象LocalTime newlocalTime = LocalTime.now(); //获取当前的时间对象LocalTime localTime = LocalTime.of(18, 28, 39, 999999999); //获取指定时间的对象System.out.println("获取当前的时间对象:" + newlocalTime);System.out.println("获取指定的时间对象:" + localTime);// 2、获取时间对象中的某个信息:getHour、getMinute、getSecond、getNanoSystem.out.println("小时:" + localTime.getHour());System.out.println("分钟:" + localTime.getMinute());System.out.println("秒:" + localTime.getSecond());System.out.println("纳秒:" + localTime.getNano());// 3、修改时间对象中的某个信息:withHour、withMinute、withSecond、withNanoLocalTime withLocalTime = localTime.withHour(19).withMinute(38).withSecond(49);System.out.println("修改时间对象:" + withLocalTime);// 4、增加时间对象中的某个信息:plusHours、plusMinutes、plusSeconds、plusNanosLocalTime plusLocalTime = localTime.plusHours(2);System.out.println("时间对象增加2小时:" + plusLocalTime);// 5、减少时间对象中的某个信息:minusHours、minusMinutes、minusSeconds、minusNanosLocalTime minusLocalTime = localTime.minusHours(2);System.out.println("时间对象减少2小时:" + minusLocalTime);// 6、判断两个时间对象,是否相等、在之前、还是之后:equals、isBefore、isAfterSystem.out.println("判断两个日期对象是否相等:" + newlocalTime.equals(localTime));System.out.println("判断两个日期对象是否在之前:" + newlocalTime.isBefore(localTime));System.out.println("判断两个日期对象是否在之后:" + newlocalTime.isAfter(localTime));// 7、将时间对象格式化为字符串DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH时mm分ss秒");String localTimeStr = formatter.format(localTime);System.out.println("将时间对象格式化为字符串:" + localTimeStr);// 8、解析字符串为时间对象LocalTime localTimeAna = LocalTime.parse(localTimeStr, formatter);System.out.println("解析字符串为时间对象:" + localTimeAna);
}
执行结果:
3、LocalDateTime 类
LocalDateTime 类表示带日期和时间,即年、月、日、小时、分钟、秒和纳秒。
LocalDateTime 类可以理解为是 LocalDate 类和 LocalTime 类的结合。
LocalDateTime 类的常用方法:
方法 | 说明 |
---|---|
getYear() getMonthValue() getDayOfMonth() getDayOfYear() getDayOfWeek() getHour() getMinute() getSecond() getNano() | 获取日期对象中的某个信息。 |
withYear(int year) withMonth(int month) withDayOfMonth(int dayOfMonth) withDayOfYear(int dayOfYear) withHour(int hour) withMinute(int minute) withSecond(int second) withNano(int nanoOfSecond) | 修改日期对象中的某个信息。 |
plusYears(long yearsToAdd) plusMonths(long monthsToAdd) plusDays(long daysToAdd) plusWeeks(long weeksToAdd) plusHours(long hoursToAdd) plusMinutes(long minutesToAdd) plusSeconds(long secondstoAdd) plusNanos(long nanosToAdd) | 增加日期对象中的某个信息 |
minusYears(long yearsToSubtract) minusMonths(long monthsToSubtract) minusDays(long daysToSubtract) minusWeeks(long weeksToSubtract) minusHours(long hoursToSubtract) minusMinutes(long minutesToSubtract) minusSeconds(long secondsToSubtract) minusNanos(long nanosToSubtract) | 减少日期对象中的某个信息。 |
equals(Object obj) isBefore(ChronoLocalDate other) isAfter(ChronoLocalDate other) | 判断两个日期对象,是否相等、在之前、还是之后。 |
format(DateTimeFormatter formatter) | 将日期对象格式化为字符串。 |
parse(CharSequence text, DateTimeFormatter formatter) | 解析字符串为日期对象。 |
【示例】使用 LocalDateTime 日期对象。
import java.time.LocalDateTime;/*** 使用 LocalDateTime 日期对象* @author pan_junbiao*/
@Test
public void TestLocalDateTime()
{// 1、创建日期对象LocalDateTime newLocalDateTime = LocalDateTime.now(); //获取当前的日期对象LocalDateTime localDateTime = LocalDateTime.of(2024, 11, 2, 18, 28, 39, 999999999); //获取指定的日期对象System.out.println("获取当前的日期对象:" + newLocalDateTime);System.out.println("获取指定的日期对象:" + localDateTime);// 2、获取日期对象中的某个信息:getYear、getMonthValue、getDayOfMonth、getDayOfYear、getDayOfWeek 等System.out.println("年:" + localDateTime.getYear());System.out.println("月:" + localDateTime.getMonthValue());System.out.println("日:" + localDateTime.getDayOfMonth());System.out.println("一年中的第几天:" + localDateTime.getDayOfYear());System.out.println("星期几:" + localDateTime.getDayOfWeek().getValue());System.out.println("小时:" + localDateTime.getHour());System.out.println("分钟:" + localDateTime.getMinute());System.out.println("秒:" + localDateTime.getSecond());System.out.println("纳秒:" + localDateTime.getNano());// 3、修改日期对象中的某个信息:withYear、withMonth、withDayOfMonth、withDayOfYear 等LocalDateTime withLocalDateTime = localDateTime.withYear(2099).withMonth(8).withDayOfMonth(11).plusHours(2);System.out.println("修改日期对象后:" + withLocalDateTime);// 4、增加日期对象中的某个信息:plusYears、plusMonths、plusDays、plusWeeks 等LocalDateTime plusLocalDateTime = localDateTime.plusDays(10);System.out.println("当前日期增加10天:" + plusLocalDateTime);// 5、减少日期对象中的某个信息:minusYears、minusMonths、minusDays、minusWeeks、minusWeeks 等LocalDateTime minusLocalDateTime = localDateTime.minusYears(1);System.out.println("当前日期减少1年:" + minusLocalDateTime);// 6、判断两个日期对象,是否相等、在之前、还是之后:equals、isBefore、isAfterSystem.out.println("判断两个日期对象是否相等:" + newLocalDateTime.equals(localDateTime));System.out.println("判断两个日期对象是否在之前:" + newLocalDateTime.isBefore(localDateTime));System.out.println("判断两个日期对象是否在之后:" + newLocalDateTime.isAfter(localDateTime));// 7、将日期对象格式化为字符串DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");String localDateTimeStr = formatter.format(localDateTime);System.out.println("将日期对象格式化为字符串:" + localDateTimeStr);// 8、解析字符串为日期对象LocalDateTime localDateTimeAna = LocalDateTime.parse(localDateTimeStr, formatter);System.out.println("解析字符串为日期对象:" + localDateTimeAna);
}
执行结果:
4、DateTimeFormatter 类
使用旧的 Date 对象时,我们通常使用 SimpleDateFormat 进行格式化显示。使用新的 LocalDateTime 或 ZonedLocalDateTime 时,我们要进行格式化显示,就要使用 DateTimeFormatter 类。和 SimpleDateFormat 不同的是,DateTimeFormatter 不但是不变对象,它还是线程安全的。因为 SimpleDateFormat 不是线程安全的,使用的时候,只能在方法内部创建新的局部变量。而 DateTimeFormatter 可以只创建一个实例,到处引用。
日期和时间模式(注意大小写,代表的含义是不同的):
模式 | 说明 |
---|---|
yyyy | 年 |
MM | 月 |
dd | 日 |
hh | 1~12小时制(1-12) |
HH | 24小时制(0-23) |
mm | 分 |
ss | 秒 |
S | 毫秒 |
E | 星期几 |
D | 一年中的第几天 |
F | 一月中的第几个星期(会把这个月总共过的天数除以7) |
w | 一年中的第几个星期 |
W | 一月中的第几星期(会根据实际情况来算) |
a | 上下午标识 |
k | 和HH差不多,表示一天24小时制(1-24)。 |
K | 和hh差不多,表示一天12小时制(0-11)。 |
z | 表示时区 |
【示例】使用 DateTimeFormatter类,实现日期和时间进行格式化和解析。
/*** 使用 DateTimeFormatter类,实现日期和时间进行格式化和解析* @author pan_junbiao*/
@Test
public void TestDateTimeFormatter()
{// 1、创建日期实例对象LocalDateTime localDateTime = LocalDateTime.of(2024, 11, 2, 18, 28, 39, 999999999); //获取指定的日期对象System.out.println("获取指定的日期对象:" + localDateTime);// 2、将日期对象格式化为字符串DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH时mm分ss秒");String localDateTimeStr = formatter.format(localDateTime);System.out.println("将日期对象格式化为字符串:" + localDateTimeStr);// 3、解析字符串为日期对象LocalDateTime localDateTimeAna = LocalDateTime.parse(localDateTimeStr, formatter);System.out.println("解析字符串为日期对象:" + localDateTimeAna);
}
执行结果: