一、LocalDateTime基础介绍
LocalDateTime是Java 8中新引入的时间日期类,描述的是不带时区的日期时间,以年、月、日、时、分、秒、纳秒的形式存储时间,也可以进行计算、格式化和解析。LocalDateTime类是一个不可变的对象,不可变是指它的值一旦确定就无法更改。
LocalDateTime now = LocalDateTime.now(); // 获取当前时间 LocalDateTime specificDate = LocalDateTime.of(2022, Month.JANUARY, 1, 10, 10, 30); // 指定日期时间 LocalDateTime dateTimeFromInstant = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault()); // 从Instant中获取日期时间
可以通过常用的方法构建LocalDateTime对象,如now()获取当前时间,of()指定日期时间,ofInstant()从一个Instant对象中获取日期时间等。
二、LocalDateTime的常用方法
1. add()和minus()
add()方法可以将指定的时间段加到当前的LocalDateTime对象上,minus()方法可以将指定的时间段减去当前的LocalDateTime对象,这两个方法都会返回一个新的LocalDateTime对象。
// 原时间为2020-04-21 13:30:45 LocalDateTime newDateTime1 = now.plusDays(1); // 增加一天,2020-04-22 13:30:45 LocalDateTime newDateTime2 = now.minusHours(5); // 减去5小时,2020-04-21 08:30:45
2. with()
with()方法可以指定LocalDateTime对象的某个字段,返回一个新的LocalDateTime对象。
LocalDateTime newDateTime = now.withYear(2022).withMonth(2).withDayOfMonth(2); // 将年月日都设置为2022-02-02
3. get()
get()方法可以获取LocalDateTime对象的某个字段的值,比如获取年、月等。
int year = specificDate.getYear(); // 获取年份 Month month = specificDate.getMonth(); // 获取月份 int day = specificDate.getDayOfMonth(); // 获取日期 int hour = specificDate.getHour(); // 获取小时 int minute = specificDate.getMinute(); // 获取分钟 int second = specificDate.getSecond(); // 获取秒 int nano = specificDate.getNano(); // 获取纳秒
4. isBefore()和isAfter()
isBefore()和isAfter()方法用于比较两个LocalDateTime对象的大小关系。
boolean isBefore = now.isBefore(specificDate); // 判断now是否在specificDate之前 boolean isAfter = now.isAfter(specificDate); // 判断now是否在specificDate之后
5. format()
format()方法用于将LocalDateTime对象格式化成字符串。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); // 定义格式化器 String formattedDateTime = now.format(formatter); // 格式化成字符串 System.out.println(formattedDateTime); // 输出:2020-04-21 13:30:45
三、总结
LocalDateTime是Java 8中的一个重要时间日期类,支持日期时间的创建、计算、格式化和解析等功能。它不受时区的影响,适合于处理不涉及时区的时间日期计算和处理场景。