Java 日期和时间 API:实用技巧与示例 - 轻松处理日期和时间


Java 日期和时间 API 提供了一组强大且灵活的类,用于处理日期和时间操作。在 Java 8 及以后的版本中,Java 引入了新的 java.time 包,它解决了旧的 java.util.Date 和 java.util.Calendar 类的许多问题。以下是一些实用技巧和示例,帮助你轻松处理日期和时间。

1. 创建日期和时间

使用 LocalDate 创建日期

LocalDate today = LocalDate.now();  // 获取当前日期
LocalDate specificDate = LocalDate.of(2023, Month.JUNE, 1);  // 指定日期

使用 LocalTime 创建时间

LocalTime now = LocalTime.now();  // 获取当前时间
LocalTime specificTime = LocalTime.of(14, 30, 15);  // 指定时间

使用 LocalDateTime 创建日期时间

LocalDateTime now = LocalDateTime.now();  // 获取当前日期时间
LocalDateTime specificDateTime = LocalDateTime.of(2023, Month.JUNE, 1, 14, 30, 15);  // 指定日期时间

2. 格式化和解析日期时间

格式化日期时间

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
LocalDateTime now = LocalDateTime.now();
String formattedDateTime = now.format(formatter);  // 格式化日期时间
System.out.println(formattedDateTime);  // 输出:2024-06-01 14:30:15

解析日期时间

String dateTimeString = "2024-06-01 14:30:15";
LocalDateTime parsedDateTime = LocalDateTime.parse(dateTimeString, formatter);  // 解析日期时间
System.out.println(parsedDateTime);  // 输出:2024-06-01T14:30:15

3. 日期时间计算

加减日期时间

LocalDate today = LocalDate.now();
LocalDate tomorrow = today.plusDays(1);  // 加1天
LocalDate lastWeek = today.minusWeeks(1);  // 减1周

LocalDateTime now = LocalDateTime.now();
LocalDateTime nextHour = now.plusHours(1);  // 加1小时
LocalDateTime lastMinute = now.minusMinutes(1);  // 减1分钟

计算日期时间差

LocalDate startDate = LocalDate.of(2024, Month.JUNE, 1);
LocalDate endDate = LocalDate.of(2024, Month.JUNE, 10);
Period period = Period.between(startDate, endDate);  // 计算日期差
System.out.println("天数差异: " + period.getDays());  // 输出:天数差异: 9

LocalDateTime startTime = LocalDateTime.of(2024, Month.JUNE, 1, 14, 0);
LocalDateTime endTime = LocalDateTime.of(2024, Month.JUNE, 1, 16, 30);
Duration duration = Duration.between(startTime, endTime);  // 计算时间差
System.out.println("小时差异: " + duration.toHours());  // 输出:小时差异: 2

4. 时区处理

使用 ZonedDateTime 处理时区

ZonedDateTime zonedDateTime = ZonedDateTime.now(ZoneId.of("America/New_York"));  // 获取当前时间并设置时区
System.out.println(zonedDateTime);  // 输出:2024-06-01T14:30:15-04:00[America/New_York]

ZonedDateTime specificZonedDateTime = ZonedDateTime.of(2024, 6, 1, 14, 30, 15, 0, ZoneId.of("Asia/Shanghai"));  // 指定日期时间和时区
System.out.println(specificZonedDateTime);  // 输出:2024-06-01T14:30:15+08:00[Asia/Shanghai]

时区转换

ZonedDateTime shanghaiTime = ZonedDateTime.now(ZoneId.of("Asia/Shanghai"));
ZonedDateTime newYorkTime = shanghaiTime.withZoneSameInstant(ZoneId.of("America/New_York"));  // 将上海时间转换为纽约时间
System.out.println(newYorkTime);  // 输出转换后的时间

5. 其他实用操作

获取年、月、日、小时、分钟、秒

LocalDateTime now = LocalDateTime.now();
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.printf("年: %d, 月: %d, 日: %d, 时: %d, 分: %d, 秒: %d%n", year, month, day, hour, minute, second);  // 输出当前的年、月、日、时、分、秒

判断闰年

LocalDate date = LocalDate.now();
boolean isLeapYear = date.isLeapYear();
System.out.println("当前年份是闰年吗?" + isLeapYear);  // 输出是否是闰年

通过这些实用技巧和示例,您可以更加轻松地处理 Java 中的日期和时间操作。如果您有更多具体需求,可以参考 Java 官方文档或者深入学习 java.time 包中的其他类和方法。


原文链接:codingdict.net