Java的LocalDateTime类是Java 8中引入的日期时间API的一部分,位于java.time包中。这个类用于表示一个不含时区信息的日期-时间,例如“2023-04-25T12:34:56.789”。它包含了年、月、日、时、分、秒和纳秒等所有日期和时间相关的信息。
引入必要的包
import java.time.LocalDateTime;
创建LocalDateTime实例
//使用当前日期和时间
LocalDateTime now = LocalDateTime.now();
System.out.println("当前日期和时间: " + now);
//使用特定日期和时间
LocalDateTime dateTime = LocalDateTime.of(2023, Month.APRIL, 25, 12, 34, 56);
System.out.println("指定日期和时间: " + dateTime);
获取日期或时间的组成部分
LocalDateTime dateTime = LocalDateTime.now();
int year = dateTime.getYear();
Month month = dateTime.getMonth();
int dayOfMonth = dateTime.getDayOfMonth();
int hour = dateTime.getHour();
int minute = dateTime.getMinute();
int second = dateTime.getSecond();
int nano = dateTime.getNano();
日期和时间运算
//增加或减少日期或时间单位
LocalDateTime dateTime = LocalDateTime.now();
LocalDateTime plusDays = dateTime.plusDays(5); // 加5天
LocalDateTime minusHours = dateTime.minusHours(2); // 减2小时
//运算到下一个或上一个时间点
LocalDateTime dateTime = LocalDateTime.now();
LocalDateTime nextHour = dateTime.truncatedTo(ChronoUnit.HOURS).plusHours(1); // 下一个小时的开始
比较LocalDateTime实例
LocalDateTime dateTime1 = LocalDateTime.of(2023, Month.APRIL, 25, 12, 0);
LocalDateTime dateTime2 = LocalDateTime.of(2023, Month.APRIL, 26, 12, 0);
if (dateTime1.isBefore(dateTime2)) {
System.out.println("dateTime1 在 dateTime2 之前");
}
if (dateTime1.isAfter(dateTime2)) {
System.out.println("dateTime1 在 dateTime2 之后");
}
if (dateTime1.isEqual(dateTime2.truncatedTo(ChronoUnit.DAYS))) {
System.out.println("两个日期相同,忽略时间部分");
}
转换为其他日期时间类型
LocalDateTime dateTime = LocalDateTime.now();
LocalDate date = dateTime.toLocalDate(); // 转换为LocalDate
LocalTime time = dateTime.toLocalTime(); // 转换为LocalTime
格式化LocalDateTime
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = dateTime.format(formatter);
System.out.println("格式化后的日期和时间: " + formattedDateTime);
案例
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.time.format.DateTimeFormatter;
public class LocalDateTimeOperations {
public static void main(String[] args) {
// 创建一个LocalDateTime对象表示当前日期和时间
LocalDateTime now = LocalDateTime.now();
// 打印当前日期和时间
System.out.println("当前日期和时间: " + now);
// 增加一小时
LocalDateTime oneHourLater = addHours(now, 1);
System.out.println("一小时后: " + oneHourLater);
// 减少一天
LocalDateTime oneDayEarlier = subtractDays(now, 1);
System.out.println("一天前: " + oneDayEarlier);
// 获取两个日期之间的时间差(以小时为单位)
long hoursBetween = getHoursBetween(now, oneDayEarlier);
System.out.println("两日期之间的时间差(小时): " + hoursBetween);
// 比较日期
boolean isAfter = isAfter(now, oneDayEarlier);
System.out.println("当前日期是否在一天后之后: " + isAfter);
// 格式化日期和时间
String formattedDateTime = formatDateTime(now);
System.out.println("格式化后的日期和时间: " + formattedDateTime);
// 获取当前时间的年份、月份、日期、小时、分钟和秒
int year = now.getYear();
int month = now.getMonthValue();
int day = now.getDayOfMonth();
int hour = now.getHour();
int minute = now.getMinute();
int second = now.getSecond();
System.out.println("年份: " + year);
System.out.println("月份: " + month);
System.out.println("日期: " + day);
System.out.println("小时: " + hour);
System.out.println("分钟: " + minute);
System.out.println("秒: " + second);
}
/**
* 增加指定的小时数到LocalDateTime对象。
*
* @param dateTime 原始LocalDateTime对象
* @param hours 要增加的小时数
* @return 增加小时后的LocalDateTime对象
*/
public static LocalDateTime addHours(LocalDateTime dateTime, int hours) {
return dateTime.plusHours(hours);
}
/**
* 从LocalDateTime对象中减去指定的天数。
*
* @param dateTime 原始LocalDateTime对象
* @param days 要减去的天数
* @return 减去天数后的LocalDateTime对象
*/
public static LocalDateTime subtractDays(LocalDateTime dateTime, int days) {
return dateTime.minusDays(days);
}
/**
* 获取两个LocalDateTime对象之间的时间差(以小时为单位)。
*
* @param startDateTime 开始日期时间
* @param endDateTime 结束日期时间
* @return 时间差(小时)
*/
public static long getHoursBetween(LocalDateTime startDateTime, LocalDateTime endDateTime) {
return ChronoUnit.HOURS.between(startDateTime, endDateTime);
}
/**
* 检查一个LocalDateTime对象是否在另一个LocalDateTime对象之后。
*
* @param dateTime1 第一个日期时间
* @param dateTime2 第二个日期时间
* @return 如果第一个日期时间在第二个之后,则返回true;否则返回false
*/
public static boolean isAfter(LocalDateTime dateTime1, LocalDateTime dateTime2) {
return dateTime1.isAfter(dateTime2);
}
/**
* 格式化LocalDateTime对象为字符串。
*
* @param dateTime 要格式化的LocalDateTime对象
* @return 格式化后的字符串
*/
public static String formatDateTime(LocalDateTime dateTime) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
return dateTime.format(formatter);
}
}