首页 > 编程语言 >Java8日期时间类

Java8日期时间类

时间:2025-01-14 19:34:14浏览次数:3  
标签:System 日期 时间 当前 println now LocalDate Java8 out

1、概述

java8在java.time包下重新实现了日期相关类。主要有LocalDate、LocalTime、LocalDateTime。每个类功能明确清晰、类之间协作简单、API 定义清晰、功能强大无需借助外部工具类,并且线程安全。


2、LocalDate

表示没有时区的日期,常用于不需要时间信息的日期操作,即年、月和日。常用于需要处理日期但不需要处理时间的场景。主要有以下常用方法:

2.1 创建LocalDate对象的方法

通过LocalDate类提供的静态方法来创建LocalDate对象

  • 1)、public static LocalDate now():根据当前日期(可以指定时区或时钟)获取LocalDate对象。
  • 2)、public static LocalDate of(年, 月, 日):根据指定日期获取LocalDate对象。
// 获取LocalDate对象的方法
// 1、LocalDate now():根据当前日期
LocalDate now1 = LocalDate.now();
System.out.println(now1); // 输出2025-01-14

// 2、LocalDate now(ZoneId zone):根据当前日期(指定时区)
LocalDate now2 = LocalDate.now(ZoneId.of("Asia/Shanghai"));
System.out.println(now2); // 输出2025-01-14

// 3、LocalDate now(Clock clock):根据当前日期(指定时钟)
LocalDate now3 = LocalDate.now(Clock.systemDefaultZone());
System.out.println(now3); // 输出2025-01-14

// 4、LocalDate of(int year, int month, int dayOfMonth):根据指定日期获取
LocalDate localDate = LocalDate.of(2025, 1, 1);	// 指定日期 2023-01-01
System.out.println(localDate); // 输出2025-01-01

2.2 获取方法

通过调用LocalDate对象的方法来获取到该日期对象的对应值。

  • 1)、public int getYear():获取年份。
  • 2)、public Month getMonth():获取月份的枚举值,可以通过该枚举值的getValue()方法获取到具体的月份(1~12)。
  • 3)、public int getMonthValue():获取月份(1~12)。
  • 4)、public int getDayOfYear():获取当前日期在当年中是第几天(1~366)。
  • 5)、public int getDayOfMonth():获取当前日期在当月中是第几天(1~31)。
  • 6)、public DayOfWeek getDayOfWeek():获取当前日期在当前星期中的星期几的枚举值,可以通过该枚举值的getValue()方法获取到具体是星期几(1~7)。
  • 7)、public int lengthOfYear():当前年份的总天数。
  • 8)、public int lengthOfMonth():当前月份的总天数。
// 获取方法
LocalDate now = LocalDate.now();
System.out.println("当前日期:" + now); // 输出 当前日期:2025-01-14
// 1、int getYear():获取年份
int year = now.getYear();
System.out.println("当前年份:" + year); // 输出 当前年份:2025

// 2、获取月份
// 1)Month getMonth():获取月份枚举值
Month month = now.getMonth();
System.out.println("当前月份枚举值:" + month);  // 输出 当前月份枚举值:JANUARY
System.out.println("当前月份枚举值的值:" + month.getValue()); // 输出 当前月份枚举值的值:1
// 2)int getMonthValue():获取月份值(1-12)
int monthValue = now.getMonthValue();
System.out.println("当前月份值:" + monthValue); // 输出 当前月份值:1

// 3、获取天(日)值
// 1)、int getDayOfYear():获取当前日期在当前年份中的第几天(1-366)
int dayOfYear = now.getDayOfYear();
System.out.println("当前年份中的第几天:" + dayOfYear); // 输出 当前年份中的第几天:14
// 2)、int getDayOfMonth():获取当前日期在当前月份中的第几天(1-31)
int dayOfMonth = now.getDayOfMonth();
System.out.println("当前月份中的第几天:" + dayOfMonth); // 输出 当前月份中的第几天:14
// 3)、DayOfWeek getDayOfWeek():获取当前日期在当前星期中的第几天
DayOfWeek dayOfWeek = now.getDayOfWeek();
System.out.println("当前星期中的星期几枚举值:" + dayOfWeek.getValue()); // 输出 当前星期中的星期几枚举值:2
System.out.println("当前星期中的星期几:" + dayOfWeek.getValue()); // 输出 当前星期中的星期几:2

// 4、int lengthOfYear():获取当年的总天数
int lengthOfYear = now.lengthOfYear();
System.out.println("当前年份的总天数:" + lengthOfYear); // 输出 当前年份的总天数:365

// 5、int lengthOfMonth():获取当月的总天数
int lengthOfMonth = now.lengthOfMonth();
System.out.println("当前月份的总天数:" + lengthOfMonth); // 输出 当前月份的总天数:31

2.3 运算方法

通过调用LocalDate对象的方法来对当前日期进行加减,返回一个新的LocalDate对象。

  • 1)、public LocalDate plusDays(long daysToAdd):当前日期加指定天数。
  • 2)、public LocalDate minusDays(long daysToSubtract):当前日期减指定天数。
  • 3)、public LocalDate plusWeeks(long daysToAdd):当前日期加指定周数。
  • 4)、public LocalDate minusWeeks(long daysToAdd):当前日期减指定周数。
  • 5)、public LocalDate plusMonths(long daysToAdd):当前日期加指定月数。
  • 6)、public LocalDate minusMonths(long daysToAdd):当前日期减指定月数。
  • 7)、public LocalDate plusYears(long daysToAdd):当前日期加指定年数。
  • 8)、public LocalDate minusYears(long daysToAdd):当前日期减指定年数。
// 运算方法
System.out.println("当前日期:" + now); // 输出 当前日期:2025-01-14
// 1、LocalDate plusDays(long daysToAdd):当前日期加指定天数
LocalDate plusDays = now.plusDays(1);
System.out.println("当前日期加一天:" + plusDays); // 输出 当前日期加一天:2025-01-15

// 2、LocalDate minusDays(long daysToSubtract):当前日期减指定天数
LocalDate minusDays = now.minusDays(1);
System.out.println("当前日期减一天:" + minusDays); // 输出 当前日期减一天:2025-01-13

// 3、LocalDate plusWeeks(long weeksToAdd):当前日期加指定周数
LocalDate plusWeeks = now.plusWeeks(1);
System.out.println("当前日期加一周:" + plusWeeks); // 输出 当前日期加一周:2025-01-21

// 4、LocalDate minusWeeks(long weeksToSubtract):当前日期减指定周数
LocalDate minusWeeks = now.minusWeeks(1);
System.out.println("当前日期减一周:" + minusWeeks); // 输出 当前日期减一周:2025-01-07

// 5、LocalDate plusMonths(long monthsToAdd):当前日期加指定月数
LocalDate plusMonths = now.plusMonths(1);
System.out.println("当前日期加一月:" + plusMonths); // 输出 当前日期加一月:2025-02-14

// 6、LocalDate minusMonths(long monthsToSubtract):当前日期减指定月数
LocalDate minusMonths = now.minusMonths(1);
System.out.println("当前日期减一月:" + minusMonths); // 输出 当前日期减一月:2024-12-14

// 7、LocalDate plusYears(long yearsToAdd):当前日期加指定年数
LocalDate plusYears = now.plusYears(1);
System.out.println("当前日期加一年:" + plusYears); // 输出 当前日期加一年:2026-01-14

// 8、LocalDate minusYears(long yearsToSubtract):当前日期加指定年数
LocalDate minusYears = now.minusYears(1);
System.out.println("当前日期加一年:" + minusYears); // 输出 当前日期加一年:2024-01-14

2.4 修改方法

通过调用LocalDate对象的方法来对当前日期的指定字段(年、月、日)进行修改,返回一个新的LocalDate对象。

  • 1)、public LocalDate withYear(int year):修改日期对象的年份。
  • 2)、public LocalDate withMonth(int month):修改日期对象的月份。
  • 3)、public LocalDate withDayOfYear(int dayOfYear):修改日期对象的日期(当前年份的第n天)。
  • 4)、public LocalDate withDayOfMonth(int dayOfMonth):修改日期对象的日期(当前月份的第n天)。
// 修改方法
System.out.println("当前日期:" + now); // 输出 当前日期:2025-01-14
// 1、LocalDate withYear(int year):修改日期对象的年份
LocalDate withYear = now.withYear(2088);
System.out.println("修改日期对象的年份:" + withYear); // 输出 修改日期对象的年份:2088-01-14

// 2.LocalDate withMonth(int month):修改日期对象的月份
LocalDate withMonth = now.withMonth(11);
System.out.println("修改日期对象的月份:" + withMonth); // 输出 修改日期对象的月份:2025-11-14

// 3.LocalDate withDayOfYear(int dayOfYear):修改日期对象的日期(当前年份的第n天)
LocalDate withDayOfYear = now.withDayOfYear(1);
System.out.println("修改日期对象的日期为当前年份的第一天:" + withDayOfYear); // 输出 修改日期对象的日期为当前年份的第一天:2025-01-01

// 4、LocalDate withDayOfMonth(int dayOfMonth):修改日期对象的日期(当前月份的第n天)
LocalDate withDayOfMonth = now.withDayOfMonth(1);
System.out.println("修改日期对象的日期为当前月份的第一天:" + withDayOfMonth); // 输出 修改日期对象的日期为当前月份的第一天:2025-01-01

2.5 比较方法

通过调用LocalDate对象的方法来将当前日期与指定日期进行比较,返回一个boolean值。

  • 1)、public boolean isBefore(ChronoLocalDate other):当前日期是否在指定日期之前。
  • 2)、public boolean isAfter(ChronoLocalDate other):当前日期是否在指定日期之后。
  • 3)、public boolean isEqual(ChronoLocalDate other):当前日期是否为指定日期。
  • 4)、public boolean isLeapYear():当前日期所在年份是否为闰年。
// 比较方法
System.out.println("当前日期:" + now); // 输出 当前日期:2025-01-14
LocalDate localDate1 = LocalDate.of(2024, 11, 11);
LocalDate localDate2 = LocalDate.of(2025, 2, 2);
// 1、指定日期是否在当前日期之前
boolean isBeforeLocalDate1 = now.isBefore(localDate1);
System.out.println("当前日期是否在2024-11-11之前:" + isBeforeLocalDate1); // 输出 当前日期是否在2024-11-11之前:false
boolean isBeforeLocalDate2 = now.isBefore(localDate2);
System.out.println("当前日期是否在2025-2-2之前:" + isBeforeLocalDate2); // 输出 当前日期是否在2025-2-2之前:true

// 2、指定日期是否在当前日期之后
boolean isAfterLocalDate1 = now.isAfter(localDate1);
System.out.println("当前日期是否在2024-11-11之后:" + isAfterLocalDate1); // 输出 当前日期是否在2024-11-11之后:true
boolean isAfterLocalDate2 = now.isAfter(localDate2);
System.out.println("当前日期是否在2025-2-2之后:" + isAfterLocalDate2); // 输出 当前日期是否在2025-2-2之后:false

// 3、指定日期是否为当前日期
boolean equalLocalDate1 = now.isEqual(localDate1);
System.out.println("当前日期是否为2024-11-11:" + equalLocalDate1); // 输出 当前日期是否为2024-11-11:false
boolean equalLocalDate = now.isEqual(LocalDate.of(2024, 12,12));
System.out.println("当前日期是否为2024-12-12:" + equalLocalDate); // 输出 当前日期是否为2024-12-12:false

// 4、当前日期所在年份是否为闰年
boolean leapYear = now.isLeapYear();
System.out.println("当前日期所在年份是否为闰年:" + leapYear); // 输出 当前日期所在年份是否为闰年:false

3、LocalTime

表示没有时区的时间,常用于不需要日期信息的时间操作,即小时、分钟、秒和纳秒。用于需要处理时间但不需要处理日期的场景。具体的方法与LocalDate大体相同。

3.1 创建LocalTime对象的方法

通过LocalTime类提供的静态方法进行获取。

  • 1)、public static LocalTime.now():根据当前时间(可以指定时区或时钟)获取LocalTime对象。
  • 2)、public static LocalTime.of(时, 分, 秒):根据指定时间获取LocalTime对象。
// 获取LocalTime对象的方法
// 1、LocalTime now():根据当前时间
LocalTime now1 = LocalTime.now();
System.out.println(now1); // 输出 15:22:02.626103100

// 2、LocalTime now(ZoneId zone):根据当前时间(指定时区)
LocalTime now2 = LocalTime.now(ZoneId.of("Asia/Shanghai"));
System.out.println(now2); // 输出 15:22:02.626103100

// 3、LocalTime now(Clock clock):根据当前时间(指定时钟)
LocalTime now3 = LocalTime.now(Clock.systemDefaultZone());
System.out.println(now3); // 输出 15:22:02.626103100

// 4、LocalTime of(int hour, int minute, int second):根据指定时间获取
LocalTime localTime = LocalTime.of(9, 9, 9);// 指定时间09:09:09
System.out.println(localTime); // 输出 09:09:09

3.2 获取方法

通过调用LocalDate对象的方法来获取到该时间对象的对应值。

  • 1)、public int getHour():获取当前时间的小时数。
  • 2)、public int getMinute():获取当前时间的分钟数。
  • 3)、public int getSecond():获取当前时间的秒数。
  • 4)、public int getNano():获取当前时间的纳秒数。
// 获取方法
System.out.println("当前时间:" + now); // 输出 当前时间:15:22:02.626103100
// 1、int getHour():获取当前时间的小时数
int hour = now.getHour();
System.out.println("当前时间的小时数:" + hour); // 输出 当前时间的小时数:15

// 2、int getMinute():获取当前时间的分钟数
int minute = now.getMinute();
System.out.println("当前时间的分钟数:" + minute); // 输出 当前时间的分钟数:22

// 3、int getSecond():获取当前时间的秒数
int second = now.getSecond();
System.out.println("当前时间的秒数:" + second); // 输出 当前时间的秒数:2

// 4、int getNano():获取当前时间的纳秒数
int nano = now.getNano();
System.out.println("当前时间的纳秒数:" + nano); // 输出 当前时间的纳秒数:626103100

3.3 运算方法

通过调用LocalTime对象的方法来对当前时间进行加减,返回一个新的LocalTime对象。

  • 1)、public LocalTime plusHours(long hoursToAdd):当前时间加指定小时数。
  • 2)、public LocalTime minusHours(long hoursToSubtract):当前时间减指定小时数。
  • 3)、public LocalTime plusMinutes(long minutesToAdd):当前时间加指定分钟数。
  • 4)、public LocalTime minusMinutes(long minutesToSubtract):当前时间减指定分钟数。
  • 5)、public LocalTime plusSeconds(long secondstoAdd):当前时间加指定秒数。
  • 6)、public LocalTime minusSeconds(long secondsToSubtract):当前时间减指定秒数。
// 运算方法
System.out.println("当前时间:" + now); // 输出 当前时间:15:22:02.626103100
// 1、LocalTime plusHours(long hoursToAdd):当前时间加指定小时数
LocalTime plusHours = now.plusHours(1);
System.out.println("当前时间加一小时:" + plusHours); // 输出 当前时间加一小时:16:22:02.626103100

// 2、LocalTime minusHours(long hoursToSubtract):当前时间减指定小时数
LocalTime minusHours = now.minusHours(1);
System.out.println("当前时间减一小时:" + minusHours); // 输出 当前时间减一小时:14:22:02.626103100

// 3、LocalTime plusMinutes(long minutesToAdd):当前时间加指定分钟数
LocalTime plusMinutes = now.plusMinutes(1);
System.out.println("当前时间加一分钟:" + plusMinutes); // 输出 当前时间加一分钟:15:23:02.626103100

// 4、LocalTime minusMinutes(long minutesToSubtract):当前时间减指定分钟数
LocalTime minusMinutes = now.minusMinutes(1);
System.out.println("当前时间减一分钟:" + minusMinutes); // 输出 当前时间减一分钟:15:21:02.626103100

// 5、LocalTime plusSeconds(long secondstoAdd):当前时间加指定秒数
LocalTime plusSeconds = now.plusSeconds(1);
System.out.println("当前时间加一秒钟:" + plusSeconds); // 输出 当前时间加一秒钟:15:22:03.626103100

// 6、LocalTime minusSeconds(long secondsToSubtract):当前时间减指定秒数
LocalTime minusSeconds = now.minusSeconds(1);
System.out.println("当前时间减一秒钟:" + minusSeconds); // 输出 当前时间减一秒钟:15:22:01.626103100

3.4 修改方法

通过调用LocalTime对象的方法来对当前时间的指定字段(时、分、秒)进行修改,返回一个新的LocalTime对象。

  • 1)、public LocalTime withHour(int hour):修改当前时间的小时数。
  • 2)、public LocalTime withMinute(int minute):修改当前时间的分钟数。
  • 3)、public LocalTime withSecond(int second):修改当前时间的秒数。
// 修改方法
System.out.println("当前时间:" + now); // 输出 当前时间:15:22:02.626103100
// 1、LocalTime withHour(int hour):修改当前时间的小时数
LocalTime withHour = now.withHour(1);
System.out.println("将当前时间的小时数设置为1点:" + withHour); // 输出 将当前时间的小时数设置为1点:01:22:02.626103100

// 2、LocalTime withMinute(int minute):修改当前时间的分钟数
LocalTime withMinute = now.withMinute(1);
System.out.println("将当前时间的分钟数设置为1分:" + withMinute); // 输出 将当前时间的分钟数设置为1分:15:01:02.626103100

// 3、LocalTime withSecond(int second):修改当前时间的秒数
LocalTime withSecond = now.withSecond(1);
System.out.println("将当前时间的描述设置为1秒:" + withSecond); // 输出 将当前时间的描述设置为1秒:15:22:01.626103100

3.5 比较方法

通过调用LocalTime对象的方法来将当前时间与指定时间进行比较。

  • 1)、public int compareTo(LocalTime other):将当前时间与指定时间进行比较,返回一个int值,如果>0则表示当前时间在指定时间之后,=0则表示是同一时间,<0则表示当前时间在指定时间之前。
  • 2)、public boolean isBefore(LocalTime other):当前时间是否在指定时间之前。
  • 3)、public boolean isAfter(LocalTime other):当前时间是否在指定时间之后。
// 比较方法
System.out.println("当前时间:" + now); // 当前时间:15:22:02.626103100
LocalTime time = LocalTime.of(11, 11, 11);
LocalTime time2 = LocalTime.of(22, 11, 11);
// 1、int compareTo(LocalTime other):返回一个int值,该值=0则表示相等,>0表示在之后,<0表示在之前
int i1 = now.compareTo(time);
System.out.println("当前时间是否比11:11:11大:" + (i1 > 0)); // 输出 当前时间是否比11:11:11大:true
int i2 = now.compareTo(time2);
System.out.println("当前时间是否比22:11:11大:" + (i2 > 0)); // 输出 当前时间是否比22:11:11大:false

// 2、boolean isBefore(LocalTime other):当前时间是否在指定时间之前
boolean isBeforeTime = now.isBefore(time);
System.out.println("当前时间是否在11:11:11之前:" + isBeforeTime); // 输出 当前时间是否在11:11:11之前:false
boolean isBeforeTime2 = now.isBefore(time2);
System.out.println("当前时间是否在22:11:11之前:" + isBeforeTime2); // 输出 当前时间是否在22:11:11之前:true

// 3、boolean isAfter(LocalTime other):当前时间是否在指定时间之后
boolean isAfterTime = now.isAfter(time);
System.out.println("当前时间是否在11:11:11之后:" + isAfterTime); // 输出 当前时间是否在11:11:11之后:true
boolean isAfterTime2 = now.isAfter(time2);
System.out.println("当前时间是否在22:11:11之后:" + isAfterTime2); // 输出 当前时间是否在22:11:11之后:false

4、LocalDateTime

表示没有时区的日期和时间,常用于包含日期和时间的完整日期时间,即年、月、日、小时、分钟、秒和纳秒。常用于需要同时处理日期和时间的场景。主要有以下常用方法:

4.1 创建LocalDateTime对象的方法

通过LocalDateTime类提供的静态方法进行获取。

  • 1)、public static LocalDateTime.now():根据当前时间(可以指定时区或时钟)获取LocalDateTime对象。
  • 2)、public static LocalDateTime.of(年, 月, 日, 时, 分, 秒):根据指定日期时间获取LocalDateTime对象。
  • 3)、public static LocalDateTime.of(LocalDate对象, LocalTime对象):根据LocalDate和LocalTime对象来获取LocalDateTime对象。
// 获取LocalDateTime对象的方法
// 1、LocalDateTime now():根据当前日期时间
LocalDateTime now1 = LocalDateTime.now();
System.out.println("当前日期时间:" + now1); // 输出 当前日期时间:2025-01-14T16:28:38.473278300

// 2、LocalDateTime now(ZoneId zone):根据当前日期时间(指定时区)
LocalDateTime now2 = LocalDateTime.now(ZoneId.of("Asia/Shanghai"));
System.out.println("当前日期时间(指定时区为上海):" + now2); // 输出 当前日期时间(指定时区为上海):2025-01-14T16:28:38.489270300

// 3、LocalDateTime now(Clock clock):根据当前日期时间(指定时钟)
LocalDateTime now3 = LocalDateTime.now(Clock.systemDefaultZone());
System.out.println("当前日期时间(指定时钟):" + now3); // 输出 当前日期时间(指定时钟):2025-01-14T16:28:38.490269800

// 4、LocalDateTime of(int year, int month, int dayOfMonth, int hour, int minute, int second):根据指定日期时间获取
LocalDateTime localDateTime = LocalDateTime.of(2024, 9, 9,9, 9, 9);				// 指定日期 2023-01-01
System.out.println("获取2024-9-9 09:09:09的日期时间对象:" + localDateTime); // 输出 获取2024-9-9 09:09:09的日期时间对象:2024-09-09T09:09:09

// 5、LocalDate of(int year, int month, int dayOfMonth):根据LocalDate和LocalTime对象来获取
LocalDate localDate = LocalDate.of(2024, 10, 10);
LocalTime localTime = LocalTime.of(10, 10, 10);
LocalDateTime localDateTime1 = LocalDateTime.of(localDate, localTime);
System.out.println("根据LocalDate和LocalTime对象来获取:" + localDateTime1); // 输出 根据LocalDate和LocalTime对象来获取:2024-10-10T10:10:10

4.2 获取方法

通过调用LocalDateTime对象的方法来获取到该时间对象的对应值。具体的获取方法与LocalDate和LocalTime的获取方法相同。

// 获取方法
System.out.println("当前日期时间:" + now); // 输出 当前日期时间:2025-01-14T16:28:38.490269800
int year = now.getYear(); // 获取年份
int monthValue = now.getMonthValue(); // 获取月份值
int dayOfMonth = now.getDayOfMonth(); // 获取天
int hour = now.getHour(); // 获取小时
int minute = now.getMinute(); // 获取分钟
int second = now.getSecond(); // 获取秒钟
System.out.printf("%d年%d月%d日 %d:%d:%d\n", year, monthValue, dayOfMonth, hour, minute, second); // 输出 2025年1月14日 16:28:38

4.3 运算方法

通过调用LocalDateTime对象的方法来对当前日期时间进行加减,返回一个新的LocalDateTime对象。具体的获取方法与LocalDate和LocalTime的运算方法相同,可以通过链式调用的方法进行运算。

// 运算方法
System.out.println("当前时间:" + now); // 输出 当前时间:2025-01-14T16:28:38.490269800
LocalDateTime plusDateTime = now.plusYears(1).plusMonths(1).plusDays(1)
        .plusHours(1).plusMinutes(1).plusSeconds(1);
System.out.println("当前时间加1年1月1日1时1分1秒:" + plusDateTime); // 输出 当前时间加1年1月1日1时1分1秒:2026-02-15T17:29:39.490269800

LocalDateTime minusDateTime = now.minusYears(1).minusMonths(1).minusDays(1)
        .plusHours(1).minusMinutes(1).minusSeconds(1);
System.out.println("当前时间减1年1月1日1时1分1秒:" + minusDateTime); // 输出 当前时间减1年1月1日1时1分1秒:2023-12-13T17:27:37.490269800

4.4 修改方法

通过调用LocalDateTime对象的方法来对当前日期时间的指定字段(年、月、日、时、分、秒)进行修改,返回一个新的LocalDateTime对象。具体的获取方法与LocalDate和LocalTime的运算方法相同,可以通过链式调用的方法进行修改。

// 修改方法
System.out.println("当前时间:" + now); // 输出 当前时间:2025-01-14T16:28:38.490269800
LocalDateTime withDateTime = now.withYear(2025).withMonth(1).withDayOfMonth(1)
        .withHour(1).withMinute(1).withSecond(1);
System.out.println("将当前时间的年设置为2025,月日时分秒属性都设置为1:" + withDateTime); // 输出 将当前时间的年设置为2025,月日时分秒属性都设置为1:2025-01-01T01:01:01.490269800

4.5 比较方法

通过调用LocalDateTime对象的方法来将当前日期时间与指定日期时间进行比较。

  • 1)、public int compareTo(ChronoLocalDateTime<?> other):将当前日期时间与指定日期时间进行比较,返回一个int值,如果>0则表示当前日期时间在指定日期时间之后,=0则表示是同一日期时间,<0则表示当前日期时间在指定日期时间之前。
  • 2)、public boolean isBefore(ChronoLocalDateTime<?> other):当前日期时间是否在指定时间之前。
  • 3)、boolean isAfter(ChronoLocalDateTime<?> other):当前日期时间是否在指定时间之后。
// 比较方法
System.out.println("当前时间:" + now); // 输出 当前时间:2025-01-14T16:28:38.490269800
LocalDateTime time = LocalDateTime.of(2024, 11, 11, 11, 11, 11);
LocalDateTime time2 = LocalDateTime.of(2025, 11, 11, 22, 11, 11);
// 1、int compareTo(ChronoLocalDateTime<?> other):返回一个int值,该值=0则表示相等,>0表示在之后,<0表示在之前
int i1 = now.compareTo(time);
System.out.println("当前日期时间是否比2024-11-11 11:11:11大:" + (i1 > 0)); // 输出 当前日期时间是否比2024-11-11 11:11:11大:true
int i2 = now.compareTo(time2);
System.out.println("当前日期时间是否比2025-11-11 22:11:11大:" + (i2 > 0)); // 输出 当前日期时间是否比2025-11-11 22:11:11大:false

// 2、boolean isBefore(ChronoLocalDateTime<?> other):当前日期时间是否在指定时间之前
boolean isBeforeTime = now.isBefore(time);
System.out.println("当前日期时间是否在2024-11-11 11:11:11之前:" + isBeforeTime); // 输出 当前日期时间是否在2024-11-11 11:11:11之前:false
boolean isBeforeTime2 = now.isBefore(time2);
System.out.println("当前日期时间是否在2025-11-11 22:11:11之前:" + isBeforeTime2); // 输出 当前日期时间是否在2025-11-11 22:11:11之前:true

// 3、boolean isAfter(ChronoLocalDateTime<?> other):当前日期时间是否在指定时间之后
boolean isAfterTime = now.isAfter(time);
System.out.println("当前日期时间是否在2024-11-11 11:11:11之后:" + isAfterTime); // 输出 当前日期时间是否在2024-11-11 11:11:11之后:true
boolean isAfterTime2 = now.isAfter(time2);
System.out.println("当前日期时间是否在2025-11-11 22:11:11之后:" + isAfterTime2); // 输出 当前日期时间是否在2025-11-11 22:11:11之后:false

5、DateTimeFormatter

Java 8中用于格式化和解析日期时间的工具类。可以将日期和时间对象转化为指定格式的字符串,也可以将符合特定格式的字符串解析为日期和时间对象。专门用于格式化和解析LocalDate、LocalTime、LocalDateTime以及ZonedDateTime等日期和时间对象。

5.1 标准格式

5.1.1 预定义标准格式

标准格式描述示例
ISO_LOCAL_DATEISO-8601标准的日期格式,仅包含日期部分2023-04-01
ISO_LOCAL_TIMEISO-8601标准的时间格式,仅包含时间部分12:30:45
ISO_LOCAL_DATE_TIMEISO-8601标准的日期-时间格式,包含日期和时间部分,中间用'T'分隔2023-04-01T12:30:45
ISO_OFFSET_DATEISO-8601标准的带时区偏移量的日期格式2023-04-01+08:00
ISO_OFFSET_TIMEISO-8601标准的带时区偏移量的时间格式12:30:45+08:00
ISO_OFFSET_DATE_TIMEISO-8601标准的带时区偏移量的日期-时间格式2023-04-01T12:30:45+08:00
ISO_ZONED_DATE_TIMEISO-8601标准的带时区信息的日期-时间格式2023-04-01T12:30:45+08:00[Asia/Shanghai]
ISO_INSTANTISO-8601标准的瞬时时间格式,通常用于表示时间戳2023-04-01T12:30:45.123456789Z
ISO_ORDINAL_DATEISO-8601标准的序数日期格式,用年份和年内的天数表示2023-100(表示2023年的第100天)
BASIC_ISO_DATEISO-8601标准的基本日期格式,使用数字分隔符'-'但无其他分隔符20230401
BASIC_ISO_TIMEISO-8601标准的基本时间格式,使用数字分隔符':'但无其他分隔符123045
BASIC_ISO_DATE_TIMEISO-8601标准的基本日期-时间格式,使用数字分隔符'-'和':'但无其他分隔符20230401123045
BASIC_ISO_OFFSET_DATEISO-8601标准的基本带时区偏移量的日期格式20230401+0800
BASIC_ISO_OFFSET_TIMEISO-8601标准的基本带时区偏移量的时间格式123045+0800
BASIC_ISO_OFFSET_DATE_TIMEISO-8601标准的基本带时区偏移量的日期-时间格式20230401123045+0800

5.1.2 基本使用

LocalDateTime now = LocalDateTime.now();
System.out.println("当前时间:" + now); // 输出 当前时间:2025-01-14T17:29:15.277818800
// 标准格式
String basicIsoDateStr = now.format(DateTimeFormatter.BASIC_ISO_DATE);
System.out.println("BASIC_ISO_DATE(yyyyMMdd)格式:");
System.out.println(basicIsoDateStr); // 输出 20250114

String isoLocalDateStr = now.format(DateTimeFormatter.ISO_LOCAL_DATE);
System.out.println("ISO_LOCAL_DATE(yyyy-MM-dd)格式:");
System.out.println(isoLocalDateStr); // 输出 2025-01-14

String isoLocalTimeStr = now.format(DateTimeFormatter.ISO_LOCAL_TIME);
System.out.println("ISO_LOCAL_TIME(HH:mm:ss)格式:");
System.out.println(isoLocalTimeStr); // 输出 17:29:15.2778188

String isoLocalDateTimeStr = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
System.out.println("ISO_LOCAL_DATE_TIME(yyyy-MM-ddTHH:mm:ss)格式:");
System.out.println(isoLocalDateTimeStr); // 输出 2025-01-14T17:29:15.2778188

5.2 自定义格式

使用DateTimeFormatter.ofPattern()自定义日期时间格式化类型,再通过时间时间类的格式化format()与解析方法parse()进行使用。

5.2.1 格式化

public String format(DateTimeFormatter formatter):将日期时间对象格式化成自定格式的字符串。

// 1、格式化
LocalDateTime now = LocalDateTime.now();
System.out.println("当前时间:" + now); // 输出 当前时间:2025-01-14T17:58:31.977283800
String ofPatternFormat1 = now.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH时mm分ss秒"));
System.out.println("自定义格式(yyyy年MM月dd日HH时mm分ss秒)格式化:");
System.out.println(ofPatternFormat1); // 输出2025年01月14日17时58分31秒
String ofPatternFormat2 = now.format(DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
System.out.println("自定义格式(yyyy/MM/dd HH:mm:ss)格式化:");
System.out.println(ofPatternFormat2); // 输出2025/01/14 17:58:31

5.2.2 解析

通过日期时间类的静态方法parse(CharSequence text, DateTimeFormatter formatter)来将字符串解析成对应的日期时间对象

// 2、解析
LocalDateTime now = LocalDateTime.now();
System.out.println("当前时间:" + now); // 输出 当前时间:2025-01-14T17:58:31.977283800
LocalDateTime parse1 = LocalDateTime.parse(ofPatternFormat1, DateTimeFormatter.ofPattern("yyyy年MM月dd日HH时mm分ss秒"));
System.out.println("自定义格式(yyyy年MM月dd日HH时mm分ss秒)解析:");
System.out.println(parse1); // 输出2025-01-14T17:58:31
LocalDateTime parse2 = LocalDateTime.parse(ofPatternFormat2, DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss"));
System.out.println("自定义格式(yyyy/MM/dd HH:mm:ss)解析:");
System.out.println(parse2); // 输出2025-01-14T17:58:31

DateTimeFormatter是不可变的和线程安全的,可以被多个线程共享。在实际应用中,建议创建一个DateTimeFormatter实例并在整个应用中复用,而不是每次需要格式化或解析时都创建一个新的实例。

6、类型转换

6.1 日期时间类与String的相互转换

通过对象.format()转换为String,通过日期(时间、日期时间)类.parse()转换为日期(时间、日期时间)对象。

6.1.1 LocalDate与String相互转换

  • 1)、LocalDate → String:LocalDate对象.format(DateTimeFormatter.ofPattern("要转换的格式"));
  • 2)、String → LocalDate:LocalDate.parse(要转换的String, DateTimeFormatter.ofPattern("要转换的格式"));
// 与字符串相互转换
// 1)、LocalDate → String:LocalDate对象.format(DateTimeFormatter.ofPattern("要转换的格式"));
LocalDate nowLocalDate = LocalDate.now();
String format = nowLocalDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println("LocalDate转String:" + format); // 输出 LocalDate转String:2025-01-14

// 2)、String → LocalDate:LocalDate.parse(要转换的String, DateTimeFormatter.ofPattern("要转换的格式"));
String nowLocalDateStr = "2024/12/13";
LocalDate parse = LocalDate.parse(nowLocalDateStr, DateTimeFormatter.ofPattern("yyyy/MM/dd"));
System.out.println("String转LocalDate:" + parse); // 输出 String转LocalDate:2024-12-13

6.1.2 LocalTime与String相互转换

  • 1)、LocalTime → String:LocalTime对象.format(DateTimeFormatter.ofPattern("要转换的格式"));
  • 2)、String → LocalTime:LocalTime.parse(要转换的String, DateTimeFormatter.ofPattern("要转换的格式"));
// 与字符串相互转换
// 1)、LocalTime→String:LocalDate对象.format(DateTimeFormatter.ofPattern("要转换的格式"));
LocalTime nowLocalTime = LocalTime.now();
String format = nowLocalTime.format(DateTimeFormatter.ofPattern("HH:mm:ss"));
System.out.println("LocalTime转String:" + format); // 输出 LocalTime转String:18:11:45

// 2)、String→LocalTime:LocalDate.parse(要转换的String, DateTimeFormatter.ofPattern("要转换的格式"));
String nowLocalTimeStr = "09:09:09";
LocalTime parse = LocalTime.parse(nowLocalTimeStr, DateTimeFormatter.ofPattern("HH:mm:ss"));
System.out.println("String转LocalTime:" + parse); // 输出 String转LocalTime:09:09:09

6.1.3 LocalDateTime与String相互转换

  • 1)、LocalDateTime → String:LocalDateTime对象.format(DateTimeFormatter.ofPattern("要转换的格式"));
  • 2)、String → LocalDateTime:LocalDateTime.parse(要转换的String, DateTimeFormatter.ofPattern("要转换的格式"));
// 与字符串相互转换
// 1)、LocalDateTime→String:LocalDateTime对象.format(DateTimeFormatter.ofPattern("要转换的格式"));
LocalDateTime nowLocalDateTime = LocalDateTime.now();
String format = nowLocalDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println("LocalDateTime转String:" + format); // 输出 LocalDateTime转String:2025-01-14 18:16:15

// 2)、String→LocalDateTime:LocalDateTime.parse(要转换的String, DateTimeFormatter.ofPattern("要转换的格式"));
String nowLocalTimeStr = "2024/09/09 09.09.09";
LocalDateTime parse = LocalDateTime.parse(nowLocalTimeStr, DateTimeFormatter.ofPattern("yyyy/MM/dd HH.mm.ss"));
System.out.println("String转LocalDateTime:" + parse); // 输出 String转LocalDateTime:2024-09-09T09:09:09

6.2 LocalDateTime与LocalDate、LocalTime的相互转换

6.2.1 LocalDateTime与LocalDate相互转换

  • 1)、LocalDateTime → LocalDate:通过LocalDateTime对象.toLocalDate()方法提取LocalDate。
  • 2)、LocalDate → LocalDateTime:通过atStartOfDay()或atTime()方法进行转换。
// LocalDateTime与LocalDate相互转换
// 1、LocalDateTime→LocalDate:通过LocalDateTime对象.toLocalDate()方法提取LocalDate
LocalDateTime now= LocalDateTime.now();
LocalDate localDateNow = now.toLocalDate();
System.out.println("LocalDateTime转LocalDate:");
System.out.println(localDateNow); // 输出2025-01-14

// 2、LocalDate→LocalDateTime:通过atStartOfDay()或atTime()方法进行转换。
// 1)、通过atStartOfDay()转换,时间设置为0点整
LocalDate localDateNow1 = LocalDate.now();
LocalDateTime localDateTimeNow1 = localDateNow1.atStartOfDay();
System.out.println("LocalDate转LocalDateTime(时间部分设置为0点整):");
System.out.println(localDateTimeNow1); // 输出2025-01-14T00:00
// 2)、通过atTime()方法转换:有两种方式
LocalDate localDateNow2 = LocalDate.now();
// Ⅰ、结合LocalTime进行转转
LocalDateTime localDateTimeNow2 = localDateNow2.atTime(LocalTime.now());
System.out.println("LocalDate转LocalDateTime(结合LocalTime对象):");
System.out.println(localDateTimeNow2); // 输出2025-01-14T18:30:45.509399400
// Ⅱ、自定义时间部分的方式进行转换
LocalDateTime localDateTimeNow3 = localDateNow2.atTime(12, 12, 12);
System.out.println("LocalDate转LocalDateTime(自定义时间部分):");
System.out.println(localDateTimeNow3); // 输出2025-01-14T12:12:12

6.2.2 LocalDateTime与LocalTime相互转换

  • 1)、LocalDateTime → LocalTime:通过LocalDateTime对象.toLocalTime()方法提取LocalTime。
  • 2)、LocalTime→ LocalDateTime:通过atDate()方法进行转换。
// LocalDateTime与LocalTime相互转换
// 1)、LocalDateTime → LocalTime:通过LocalDateTime对象.toLocalTime()方法提取LocalTime。
LocalDateTime now = LocalDateTime.now();
LocalTime localTimeNow = now.toLocalTime();
System.out.println("LocalDateTime转LocalTime:");
System.out.println(localTimeNow); // 输出 18:42:37.913955300

// 2)、LocalTime→ LocalDateTime:通过atDate()方法进行转换。
LocalTime localTimeNow1 = LocalTime.now();
LocalDateTime localDateTime = localTimeNow1.atDate(LocalDate.now());
System.out.println("LocalTime转LocalDateTime(自定义日期):");
System.out.println(localDateTime); // 输出 2025-01-14T18:42:37.913955300

标签:System,日期,时间,当前,println,now,LocalDate,Java8,out
From: https://blog.csdn.net/Lweqin/article/details/145125995

相关文章

  • 【转】SQL Server 时间日期 格式转换
    在SQLSERVER中,用CONVERT对日期作格式转换SELECTGETDATE()输出2025-07-0504:27:47 语句及查询结果:SelectCONVERT(varchar(100),GETDATE(),0):0516200610:57AMSelectCONVERT(varchar(100),GETDATE(),1):05/16/06SelectCONVERT(varchar(100),GETDATE()......
  • Alertmanager 配置报警模板,时间要设置东八区
    在Alertmanager中配置报警模板时,默认的时间格式是UTC时间。如果需要将时间设置为东八区(UTC+8),可以通过Go模板语言中的时间格式化函数来实现。以下是配置东八区时间的详细步骤:1.修改模板文件在模板文件中,使用Go模板的time函数将时间转换为东八区。示例模板文......
  • 时间是什么
            国际计量单位时间的方法‌目前是采用原子钟原理,1秒等于铯133原子基态两个超精细能级之间跃迁对应辐射的9192631770个周期所持续的时长。    物理学上对时间的定义是:时间是物质的永恒运动、变化的持续性、顺序性的表现,包含时刻和时段两个概念。  ......
  • 使用Python实现基于矩阵分解的长期事件(MFLEs)时间序列分析
    在现代数据分析领域,时间序列数据的处理和预测一直是一个具有挑战性的问题。随着物联网设备、金融交易系统和工业传感器的普及,我们面临着越来越多的高维时间序列数据。这些数据不仅维度高,而且往往包含复杂的时间依赖关系和潜在模式。传统的时间序列分析方法如移动平均等,在处理此类......
  • Oracle 如何生成连续的数字/字符/时间序列
     文章目录使用层次查询生成序列生成一个连接的数字序列生成一个间隔的数字序列生成一个连续的字符序列生成一个间隔的时间序列使用表函数生成序列创建模拟的generate_series函数使用generate_series函数生成序列使用通用表表达式生成序列生成一个......
  • 时间序列预测模型和 随机森林预测模型原理和使用
    让我们一起走向未来......
  • 工程水印相机结合图纸,真实现场时间地点,如何使用水印相机,超简单方法只教一次!
    在工程管理领域,精准记录现场信息至关重要。水印相机拍照功能,为工程人员提供了强大的现场信息记录工具,助力工程管理和统计工程量,更可以将图片分享到电脑、分享给同事,协同工作。一、打开图纸打开手机版CAD快速看图中的一张图纸后,在底部工具栏点击“照片标注”功能,便能找到“水......
  • 【最详细ComfyUI教程】2025年腾讯大佬花了一周时间整理的ComfyUI保姆级教程!
    前言:在当今快速发展的社会,掌握一项实用的技能对于安身立足至关重要。很多人推荐学习编程、数据分析等技术,但其中最引人瞩目的当属人工智能(AI)。特别是AI绘画,融合了艺术与科技,成为了当今最具潜力的领域之一。通过学习AI绘画,你不仅可以探索创意的无限可能,还能在科技驱动的市......
  • Java 邮件发送超时时间问题及优化方案详解
    哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云/阿里云/华为云/51CTO;欢迎大家常来逛逛  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。  我是一名后端开发爱好者......
  • 【C++项目实战】类和对象入门实践:日期类实现万字详解
          ......