LocalDateTime类常用方法

LocalDateTime 是 Java 8+ 处理「本地日期 + 时间」(无时区)的核心类,常用方法可分为 创建对象、获取字段、修改时间、时间比较、格式转换 5 大类,结合你之前的「取水代码」场景,我会用通俗的例子和实际用途讲解,新手易理解。

一、创建 LocalDateTime 对象(最基础)

用于生成时间实例,是所有操作的前提,你代码中用的是 of() 方法:

表格

方法作用示例(对应你代码的取水时间)
LocalDateTime.of(年,月,日,时,分,秒)指定具体时间创建(最常用)LocalDateTime.of(2026,3,22,10,0,0) → 2026-03-22 10:00:00
LocalDateTime.now()获取当前系统的本地时间LocalDateTime.now() → 比如 2026-03-22 15:30:20
LocalDateTime.parse(字符串)解析固定格式的字符串为时间(需符合 yyyy-MM-ddTHH:mm:ssLocalDateTime.parse("2026-03-22T10:00:00")

你代码中的用法:读取输入的年、月、日、时、分、秒,组装成取水时间:

LocalDateTime time = LocalDateTime.of(year, month, day, hour, minute, second);

二、获取时间字段(提取年 / 月 / 日 / 时等)

用于从时间对象中提取具体字段,比如判断取水时间是几点、几号:

表格

方法作用示例(time=2026-03-22 10:00:00)
getYear()获取年份time.getYear() → 2026
getMonthValue()获取月份(1-12)time.getMonthValue() → 3
getDayOfMonth()获取日期(1-31)time.getDayOfMonth() → 22
getHour()获取小时(0-23)time.getHour() → 10
getMinute()获取分钟(0-59)time.getMinute() → 0
getSecond()获取秒(0-59)time.getSecond() → 0

三、修改时间(加减 / 替换字段)

核心用于计算「封禁截止时间」(你代码中用 plusHours()),注意:LocalDateTime 是不可变的,所有修改方法都会返回新对象,原对象不变

表格

方法作用示例(time=2026-03-22 10:00:00)
plusHours(n)加 n 小时(核心)time.plusHours(6) → 2026-03-22 16:00:00(封禁 6 小时)
plusMinutes(n)加 n 分钟time.plusMinutes(30) → 2026-03-22 10:30:00
plusDays(n)加 n 天time.plusDays(1) → 2026-03-23 10:00:00
minusHours(n)减 n 小时time.minusHours(2) → 2026-03-22 08:00:00
withHour(n)替换小时(直接改)time.withHour(14) → 2026-03-22 14:00:00
withDayOfMonth(n)替换日期time.withDayOfMonth(25) → 2026-03-25 10:00:00

你代码中的用法:计算水井封禁截止时间(取水时间 + 6 小时 / 1 小时):

banUntil = time.plusHours(6); // 公共井封禁6小时
banUntil = time.plusHours(1); // 私人井封禁1小时

四、时间比较(核心用于判断封禁期)

用于判断「当前取水时间是否在封禁截止时间之前」,返回 boolean(true/false):

表格

方法作用示例(time1=10:00, time2=16:00)
isBefore(目标时间)判断当前时间是否在目标时间之前(核心)time1.isBefore(time2) → true(10 点在 16 点前)
isAfter(目标时间)判断当前时间是否在目标时间之后time1.isAfter(time2) → false
isEqual(目标时间)判断两个时间是否完全相同time1.isEqual(time2) → false

你代码中的核心逻辑:判断取水时间是否在封禁期内(banUntil 是封禁截止时间):

if (banUntil != null && time.isBefore(banUntil)) {
    return null; // 还在封禁期,取不到水
}

五、格式转换(时间↔字符串)

用于将时间对象转为易读的字符串(比如日志输出),需配合 DateTimeFormatter

import java.time.format.DateTimeFormatter;

public class Demo {
    public static void main(String[] args) {
        LocalDateTime time = LocalDateTime.of(2026,3,22,10,0,0);
        // 1. 时间 → 字符串(自定义格式)
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        String timeStr = time.format(formatter);
        System.out.println(timeStr); // 输出:2026-03-22 10:00:00
        
        // 2. 字符串 → 时间(格式必须匹配)
        LocalDateTime time2 = LocalDateTime.parse("2026-03-22 10:00:00", formatter);
    }
}

总结(核心要点)

  1. 创建:优先用 of(年,月,日,时,分,秒)(指定时间)、now()(当前时间);
  2. 修改plusHours(n)(加小时)是你代码的核心,用于计算封禁时间;
  3. 比较isBefore() 是判断封禁期的关键,记住「当前时间.isBefore (截止时间) → 还在封禁期」;
  4. 特性:LocalDateTime 不可变,修改后要接收新对象(比如 banUntil = time.plusHours(6))。

这些是 LocalDateTime 80% 场景会用到的方法,尤其是你的取水代码中,只用到了 of()plusHours()isBefore() 三个核心方法,掌握这三个就能理解代码中的时间逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值