Java 8引入了新的日期和时间API,其中包括`LocalDateTime`类,它表示没有时区信息的日期和时间。这个类是不可变的,并且线程安全。`LocalDateTime`类提供了大量的方法来处理日期和时间,包括格式化、转换和计算。
创建LocalDateTime对象
import java.time.LocalDateTime;
LocalDateTime now = LocalDateTime.now(); // 当前日期和时间
LocalDateTime specificDate = LocalDateTime.of(2023, 3, 15, 15, 30); // 2023年3月15日15点30分
获取日期和时间组件
int year = now.getYear(); // 获取年
int month = now.getMonthValue(); // 获取月
int day = now.getDayOfMonth(); // 获取日
int hour = now.getHour(); // 获取小时
int minute = now.getMinute(); // 获取分钟
int second = now.getSecond(); // 获取秒
日期和时间的修改
LocalDateTime tomorrow = now.plusDays(1); // 明天
LocalDateTime yesterday = now.minusDays(1); // 昨天
LocalDateTime twoHoursLater = now.plusHours(2); // 两小时后
LocalDateTime twoHoursEarlier = now.minusHours(2); // 两小时前
检查日期的属性
boolean isLeapYear = now.isLeapYear(); // 是否是闰年
boolean isBefore = now.isBefore(specificDate); // 是否在特定日期之前
boolean isAfter = now.isAfter(specificDate); // 是否在特定日期之后
日期和时间的格式化
import java.time.format.DateTimeFormatter;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String formattedDateTime = now.format(formatter); // 格式化日期和时间
解析日期和时间
LocalDateTime parsedDateTime = LocalDateTime.parse("2023-03-15T15:30:00", DateTimeFormatter.ISO_LOCAL_DATE_TIME); // 使用ISO格式解析
LocalDateTime customParsedDateTime = LocalDateTime.parse("2023-03-15 15:30:00", formatter); // 使用自定义格式解析
时间计算
LocalDateTime start = LocalDateTime.of(2023, 3, 15, 10, 0);
LocalDateTime end = LocalDateTime.of(2023, 3, 15, 12, 30);
Duration duration = Duration.between(start, end); // 计算两个时间之间的持续时间
long hours = duration.toHours(); // 转换为小时
时区转换
import java.time.ZoneId;
import java.time.ZonedDateTime;
ZonedDateTime zonedDateTime = now.atZone(ZoneId.systemDefault()); // 转换为默认时区的ZonedDateTime
ZonedDateTime zonedDateTimeInNewYork = now.atZone(ZoneId.of("America/New_York")); // 转换为纽约时区的ZonedDateTime
与老日期时间API的转换
import java.util.Date;
Date date = Date.from(now.atZone(ZoneId.systemDefault()).toInstant()); // LocalDateTime转换为Date
LocalDateTime fromUtilDate = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime(); // Date转换为LocalDateTime
日期时间的截断和调整
LocalDateTime truncatedToHour = now.truncatedTo(ChronoUnit.HOURS); // 截断到小时
LocalDateTime roundedToNearestHour = now.truncatedTo(ChronoUnit.HOURS).plusMinutes(30).minusMinutes(30); // 四舍五入到最近的小时
日期时间的周期性
LocalDateTime firstDayOfMonth = now.withDayOfMonth(1); // 本月的第一天
LocalDateTime lastDayOfMonth = now.with(TemporalAdjusters.lastDayOfMonth()); // 本月的最后一天
LocalDateTime nextFriday = now.with(TemporalAdjusters.next(DayOfWeek.FRIDAY)); // 下一个星期五
日期时间的比较
int comparison = now.compareTo(specificDate); // 比较两个日期时间
if (comparison < 0) {
System.out.println("Now is before specific date");
} else if (comparison > 0) {
System.out.println("Now is after specific date");
} else {
System.out.println("Now is equal to specific date");
}
日期时间的加减操作
LocalDateTime plusYears = now.plusYears(1); // 加一年
LocalDateTime minusMonths = now.minusMonths(2); // 减两个月
LocalDateTime plusWeeks = now.plusWeeks(3); // 加三周
LocalDateTime minusDays = now.minusDays(4); // 减四天
以上是LocalDateTime类的一些常用API和方法的概述。这些方法提供了创建、操作、格式化和转换日期时间的强大工具,使Java开发者能够更容易地处理日期和时间数据。