Java8时间接口LocalDateTime详细用法
简介
Java8新增了一套时间日期API,称为java.time,提供了更好的可读性和更好的精度。LocalDateTime是这些API的一个实现类,代表了一个本地的日期和时间,不带时区信息。
创建LocalDateTime对象
可以使用now()方法创建当前日期时间的对象:
LocalDateTime now = LocalDateTime.now();
可以使用of()方法创建指定日期时间的对象:
LocalDateTime dateTime = LocalDateTime.of(2022, 1, 1, 12, 0, 0);
LocalDateTime与Date、Calendar的转换
可以使用LocalDateTime的atZone()方法将LocalDateTime对象转换为ZonedDateTime,再使用toDate()方法将ZonedDateTime对象转换为Date对象:
LocalDateTime dateTime = LocalDateTime.now();
ZonedDateTime zonedDateTime = dateTime.atZone(ZoneId.systemDefault());
Date date = Date.from(zonedDateTime.toInstant());
也可以使用LocalDateTime的atZone()方法将LocalDateTime对象转换为ZonedDateTime,再使用toInstant()方法将ZonedDateTime对象转换为Instant对象,再使用ofEpochMilli()方法将Instant对象转换为Date对象:
LocalDateTime dateTime = LocalDateTime.now();
ZonedDateTime zonedDateTime = dateTime.atZone(ZoneId.systemDefault());
Instant instant = zonedDateTime.toInstant();
Date date = Date.from(instant);
可以使用Calendar的setTime()方法将Date对象转换为Calendar对象,再使用Calendar的get()方法获取对应的年、月、日、时、分、秒信息,再使用LocalDateTime的of()方法创建LocalDateTime对象:
Date date = new Date();
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DAY_OF_MONTH);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
LocalDateTime dateTime = LocalDateTime.of(year, month, day, hour, minute, second);
LocalDateTime的常用方法
获取日期时间信息
可以使用LocalDateTime的get()方法获取年、月、日、时、分、秒等信息:
LocalDateTime dateTime = LocalDateTime.now();
int year = dateTime.getYear();
int month = dateTime.getMonthValue();
int day = dateTime.getDayOfMonth();
int hour = dateTime.getHour();
int minute = dateTime.getMinute();
int second = dateTime.getSecond();
格式化输出日期时间信息
可以使用DateTimeFormatter类的ofPattern()方法创建指定格式的DateTimeFormatter对象,再使用LocalDateTime的format()方法将日期时间格式化为指定格式的字符串:
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
String formatDateTime = dateTime.format(formatter);
System.out.println(formatDateTime);
输出结果:
2022年02月20日 14:05:12
根据指定时间差计算新的日期时间
可以使用LocalDateTime的plus()方法或minus()方法根据指定的时间差计算新的日期时间:
LocalDateTime dateTime1 = LocalDateTime.of(2022, 1, 1, 12, 0, 0);
LocalDateTime dateTime2 = dateTime1.plusDays(30);
LocalDateTime dateTime3 = dateTime1.minusHours(2);
判断日期大小
可以使用LocalDateTime的isBefore()方法、isAfter()方法或equals()方法判断两个日期的大小关系:
LocalDateTime dateTime1 = LocalDateTime.of(2022, 1, 1, 12, 0, 0);
LocalDateTime dateTime2 = LocalDateTime.of(2022, 2, 1, 12, 0, 0);
boolean before = dateTime1.isBefore(dateTime2); // true
boolean after = dateTime1.isAfter(dateTime2); // false
boolean equals = dateTime1.equals(dateTime2); // false
示例
示例1:将Date对象转换为LocalDateTime对象
public static LocalDateTime convertDateToLocalDateTime(Date date) {
Instant instant = date.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
return LocalDateTime.ofInstant(instant, zoneId);
}
示例2:将字符串解析为LocalDateTime对象
public static LocalDateTime parseStringToLocalDateTime(String str) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
return LocalDateTime.parse(str, formatter);
}
总结
本文介绍了Java8时间接口LocalDateTime的用法,包括创建LocalDateTime对象、转换LocalDateTime与Date、Calendar之间的转换、常用方法及示例。在Java8之前,Date和Calendar类一度是Java中时间日期处理的标准实现,但它们存在的问题也是众所周知的。Java8新增的java.time包提供了新的时间日期API,不仅避免了Date和Calendar存在的问题,而且提供了更好的可读性和更好的精度,是Java8中的一个重要更新。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java8时间接口LocalDateTime详细用法 - Python技术站