Java LocalDateTime 的常用方法总结

前言

LocalDateTimeLocalDateLocalTime 是 Java8 全新的日期框架,加强了对时间的管理,有很多特别好用的时间运算方法,而且是线程安全的,较之前的 java.util.Date 以及 Calander 使用起来更加的方便直观,下面介绍几种常见的日期对象用法。

  • LocalDateTime:日期加时间的日期对象,包含年月日时分秒

  • LocalDate:日期类,包含年月日

  • LocalTime:时间类,包含时分秒

获取当前时间

LocalDate localDateNow = LocalDate.now();
LocalTime localTimeNow = LocalTime.now();
LocalDateTime localDateTimeNow = LocalDateTime.now();

// 当然也可以
LocalDate localDateSpecific = LocalDate.of(2024, 8, 5);
LocalTime localTimeSpecific = LocalTime.of(15, 35, 28);
LocalDateTime localDateTimeSpecific = LocalDateTime.of(2024, 8, 5, 15, 35, 28);

System.out.println("localDateNow: " + localDateNow);
System.out.println("localTimeNow: " + localTimeNow);
System.out.println("localDateTimeNow" + localDateTimeNow);

输出结果为:

localDateNow: 2024-08-05
localTimeNow: 15:40:40.446599
localDateTimeNow: 2024-08-05T15:40:40.446612

可以看到不用做格式转换就可以得到可读性很高的日期格式。注意:ISO 8601规定的日期和时间分隔符是T。标准格式如下:

日期:yyyy-MM-dd

时间:HH:mm:ss

带毫秒的时间:HH:mm:ss.SSS

日期和时间:yyyy-MM-dd’T’HH:mm:ss

带毫秒的日期和时间:yyyy-MM-dd’T’HH:mm:ss.SSS

获取当前时间的年月日时分秒

LocalDateTime localDateTime = LocalDateTime.now(); 	// 获取当前时间
int year = localDateTime.getYear(); 							 	// 获取年份 2024
int month = localDateTime.getMonthValue(); 				  // 获取月份 8
int day = localDateTime.getDayOfMonth(); 						// 获取月中的天数 5
int hour = localDateTime.getHour(); 								// 获取当前的小时 15
int minute = localDateTime.getMinute(); 						// 获取当前分钟 35
int second = localDateTime.getSecond(); 						// 获取当前秒数 22

时间与字符串相互转换

可参考Java各类日期和时间转换超强总结(Date和LocalDateTime相互转换等)

// 将字符串转换为指定格式的时间(格式要和给定的格式一致,不然会报错)
LocalDateTime parse1 = LocalDateTime.parse("2024-08-05 16:13:22", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime parse2 = LocalDateTime.parse("2024 08 05 16:13:22", DateTimeFormatter.ofPattern("yyyy MM dd HH:mm:ss"));
LocalDateTime parse3 = LocalDateTime.parse("2024.08.05 16:13:22", DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss"));
System.out.println(parse1); // 输出2024-08-05T16:13:22
System.out.println(parse2); // 输出2024 08 05T16:13:22
System.out.println(parse3); // 输出2024.08.05T16:13:22
// 时间转字符串
LocalDateTime now = LocalDateTime.now();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String localDateTimeStr = now.format(dateTimeFormatter);
System.out.println(localDateTimeStr); // 输出 2024-08-05 16:13:22

时间运算:加上对应时间

使用plusXxx方法

// 注意以下方法参数可以为负数,等同于减去对应的单位,即now.plusYears(-2)就是在当前时间减去2年
LocalDateTime plusYears = now.plusYears(2);       // 在当前时间加上2年
LocalDateTime plusMonths = now.plusMonths(2);     // 在当前时间加上2月
LocalDateTime plusDays = now.plusDays(2);         // 在当前时间加上2天
LocalDateTime plusHours = now.plusHours(2);       // 在当前时间加上2个小时
LocalDateTime plusMinutes = now.plusMinutes(30);  // 在当前时间加上30分钟
LocalDateTime plusSeconds = now.plusSeconds(30);  // 在当前时间加上30秒

使用ChronoUnit中的addTo()方法

LocalDateTime now = LocalDateTime.now();													// 当前时间

// 注意:以下方法参数可以为负数,等同于减去对应的单位,即ChronoUnit.YEARS.addTo(now, -2)就是在当前时间减去2年
LocalDateTime addToYears = ChronoUnit.YEARS.addTo(now, 2);				// 在当前时间加上2年
LocalDateTime addToMonths = ChronoUnit.MONTHS.addTo(now, 2);			// 在当前时间加上2月
LocalDateTime addToDays = ChronoUnit.DAYS.addTo(now, 2);					// 在当前时间加上2天
LocalDateTime addToHours = ChronoUnit.HOURS.addTo(now, 2);				// 在当前时间加上2个小时
LocalDateTime addToMinutes = ChronoUnit.MINUTES.addTo(now, 2);		// 在当前时间加上30分钟
LocalDateTime addToSeconds = ChronoUnit.SECONDS.addTo(now, 2);		// 在当前时间加上30秒

时间运算:减去对应时间

使用minusXxx方法

LocalDateTime now = LocalDateTime.now();            // 当前时间

// 注意:以下方法参数可以为负数,等同于加上对应的单位,即now.minusYears(-2)就是在当前时间加上2年
LocalDateTime minusYears = now.minusYears(2);       // 在当前时间减去2年
LocalDateTime minusMonths = now.minusMonths(2);     // 在当前时间减去2月
LocalDateTime minusDays = now.minusDays(2);         // 在当前时间减去2天
LocalDateTime minusHours = now.minusHours(2);       // 在当前时间减去2个小时
LocalDateTime minusMinutes = now.minusMinutes(30);  // 在当前时间减去30分钟
LocalDateTime minusSeconds = now.minusSeconds(30);  // 在当前时间减去30秒

使用ChronoUnit中的addTo()方法

LocalDateTime now = LocalDateTime.now();													// 当前时间

// 注意:以下方法参数可以为正数,等同于加上对应的单位,即ChronoUnit.YEARS.addTo(now, 2)就是在当前时间加上2年
LocalDateTime addToYears = ChronoUnit.YEARS.addTo(now, -2);				// 在当前时间减去2年
LocalDateTime addToMonths = ChronoUnit.MONTHS.addTo(now, -2);			// 在当前时间减去2月
LocalDateTime addToDays = ChronoUnit.DAYS.addTo(now, -2);					// 在当前时间减去2天
LocalDateTime addToHours = ChronoUnit.HOURS.addTo(now, -2);				// 在当前时间减去2个小时
LocalDateTime addToMinutes = ChronoUnit.MINUTES.addTo(now, -30);	// 在当前时间减去30分钟
LocalDateTime addToSeconds = ChronoUnit.SECONDS.addTo(now, -30);	// 在当前时间减去30秒

两个时间比较

isBefore()

LocalDateTimeisBefore()方法用于判断一个LocalDateTime是否在另一个LocalDateTime之前。如果当前对象在另一个对象之前,返回true;否则返回false。

LocalDateTime now = LocalDateTime.now();            // 当前时间
LocalDateTime afterFiveYears = now.plusYears(5);    // 在当前时间加上5年
boolean before = afterFiveYears.isBefore(now);      // 输出 false

isAfter()

LocalDateTimeisAfter()方法用于判断一个LocalDateTime是否在另一个LocalDateTime之后。如果当前对象在另一个对象之后,返回true;否则返回false。

LocalDateTime now = LocalDateTime.now();            // 当前时间
LocalDateTime afterFiveYears = now.plusYears(5);    // 在当前时间加上5年
boolean after = afterFiveYears.isAfter(now);        // 输出 true

利用Duration计算时间差

注意:是用第二个参数减去第一个参数。没有计算相差年值和相差月值的方法,可以用其他差值来自己推导。

LocalDateTime now = LocalDateTime.now(); // 当前时间
//  给LocalDateTime 赋值
LocalDateTime localDateTime = LocalDateTime.of(2025,2,22,2,2,2);
Duration duration = Duration.between(localDateTime,now);            // 后面减去前面
long toDays = Duration.between(localDateTime,now).toDays();         //相差的天数
long toHours = Duration.between(localDateTime,now).toHours();       //相差的小时数
long toMinutes = Duration.between(localDateTime,now).toMinutes();   //相差的分钟数
long toSeconds = Duration.between(localDateTime,now).toSeconds();   //相差的秒数
long toMillis = Duration.between(localDateTime,now).toMillis();     //相差毫秒数
long toNanos = Duration.between(localDateTime,now).toNanos();       //相差的纳秒数

改变当前时间的年月日时分秒

LocalDateTime now = LocalDateTime.now();                    // 当前时间
LocalDateTime withYear = now.withYear(2060);                // 改变当前年份(变成2060年)
LocalDateTime withMonth = now.withMonth(12);                // 改变当前月份(变成12月份)
LocalDateTime withDayOfMonth = now.withDayOfMonth(28);      //改变当前天数(变成28日)
LocalDateTime withHour = now.withHour(23);                  // 改变当前小时数(变成23时)
LocalDateTime withMinute = now.withMinute(30);              // 改变当前分钟(变成30分钟)
LocalDateTime withSecond = now.withSecond(23);              // 改变当前小时数(变成23时)
LocalDateTime withDayOfYear = now.withDayOfYear(60);        // 从一月一号开始加上60天

自定义输出的格式

// 自定义格式化:
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
DateTimeFormatter dtf2 = DateTimeFormatter.ofPattern("yyyy.MM.dd HH:mm:ss");
System.out.println("自定义格式dtf1: " + dtf1.format(LocalDateTime.now())); //自定义格式dtf1: 2024/08/05 17:19:50
System.out.println("自定义格式dtf2: " + dtf2.format(LocalDateTime.now())); //自定义格式dtf2: 2024.08.05 17:19:50

LocalDateTime的with()方法

// 本月第一天0:00时刻:
LocalDateTime firstDay = LocalDate.now().withDayOfMonth(1).atStartOfDay();
// 本月最后1天:
LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth());
// 下月第1天:
LocalDate nextMonthFirstDay = LocalDate.now().with(TemporalAdjusters.firstDayOfNextMonth());
// 本月第1个周一:
LocalDate firstWeekday = LocalDate.now().with(TemporalAdjusters.firstInMonth(DayOfWeek.MONDAY));
// 下1个周一:
LocalDate nextWeekday = LocalDate.now().with(TemporalAdjusters.next(DayOfWeek.MONDAY));
 LocalDateTime获取时间以及计算都非常方便,而且是线程安全的,建议使用LocalDateTime
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaLocalDateTime 类是一个不可变的日期时间对象,它提供了很多有用的方法来处理日期和时间。 以下是常用LocalDateTime 方法: 1. now():获取当前的日期时间。 2. of():根据指定的日期时间创建 LocalDateTime 对象。 3. getYear():获取年份。 4. getMonth():获取月份。 5. getMonthValue():获取月份的值,1表示1月,12表示12月。 6. getDayOfMonth():获取月份中的日期。 7. getDayOfWeek():获取星期几。 8. getHour():获取小时数。 9. getMinute():获取分钟数。 10. getSecond():获取秒数。 11. withYear():设置年份,并返回新的 LocalDateTime 对象。 12. withMonth():设置月份,并返回新的 LocalDateTime 对象。 13. withDayOfMonth():设置月份中的日期,并返回新的 LocalDateTime 对象。 14. withHour():设置小时数,并返回新的 LocalDateTime 对象。 15. withMinute():设置分钟数,并返回新的 LocalDateTime 对象。 16. withSecond():设置秒数,并返回新的 LocalDateTime 对象。 17. plusYears():增加指定的年数,并返回新的 LocalDateTime 对象。 18. plusMonths():增加指定的月数,并返回新的 LocalDateTime 对象。 19. plusDays():增加指定的天数,并返回新的 LocalDateTime 对象。 20. plusHours():增加指定的小时数,并返回新的 LocalDateTime 对象。 21. plusMinutes():增加指定的分钟数,并返回新的 LocalDateTime 对象。 22. plusSeconds():增加指定的秒数,并返回新的 LocalDateTime 对象。 23. minusYears():减少指定的年数,并返回新的 LocalDateTime 对象。 24. minusMonths():减少指定的月数,并返回新的 LocalDateTime 对象。 25. minusDays():减少指定的天数,并返回新的 LocalDateTime 对象。 26. minusHours():减少指定的小时数,并返回新的 LocalDateTime 对象。 27. minusMinutes():减少指定的分钟数,并返回新的 LocalDateTime 对象。 28. minusSeconds():减少指定的秒数,并返回新的 LocalDateTime 对象。 29. format():将 LocalDateTime 对象格式化为指定的字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值