在Java开发中,处理日期和时间是一个常见的需求,无论是数据库查询、日志记录还是业务逻辑处理,都离不开对日期时间的精确操作。Java自JDK 8起引入了新的日期时间API,如java.time
包下的LocalDate
, LocalTime
, LocalDateTime
, ZonedDateTime
等,这些API相比之前的java.util.Date
和java.text.SimpleDateFormat
提供了更强大、更安全、更易用的功能。本文将介绍一个基于java.time
包构建的日期时间操作工具类——DateTimeUtil
,并演示其主要功能。
DateTimeUtil工具类代码
Java
深色版本
1import java.time.*;
2import java.time.format.DateTimeFormatter;
3import java.time.temporal.TemporalAdjusters;
4
5public class DateTimeUtil {
6
7 private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
8 private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
9
10 // 获取当前日期时间
11 public static LocalDateTime now() {
12 return LocalDateTime.now();
13 }
14
15 // 获取当前日期
16 public static LocalDate today() {
17 return LocalDate.now();
18 }
19
20 // 将字符串转换为LocalDate
21 public static LocalDate parseDate(String dateStr) {
22 return LocalDate.parse(dateStr, DATE_FORMATTER);
23 }
24
25 // 将字符串转换为LocalDateTime
26 public static LocalDateTime parseDateTime(String dateTimeStr) {
27 return LocalDateTime.parse(dateTimeStr, DATETIME_FORMATTER);
28 }
29
30 // 将LocalDate转换为字符串
31 public static String format(LocalDate date) {
32 return date.format(DATE_FORMATTER);
33 }
34
35 // 将LocalDateTime转换为字符串
36 public static String format(LocalDateTime dateTime) {
37 return dateTime.format(DATETIME_FORMATTER);
38 }
39
40 // 计算两个日期之间的天数差
41 public static long betweenDays(LocalDate startDate, LocalDate endDate) {
42 return ChronoUnit.DAYS.between(startDate, endDate);
43 }
44
45 // 计算两个日期时间之间的秒数差
46 public static long betweenSeconds(LocalDateTime startDateTime, LocalDateTime endDateTime) {
47 return ChronoUnit.SECONDS.between(startDateTime, endDateTime);
48 }
49
50 // 获取指定日期的最后一天
51 public static LocalDate getLastDayOfMonth(LocalDate date) {
52 return date.with(TemporalAdjusters.lastDayOfMonth());
53 }
54
55 // 获取指定日期的下一个月的第一天
56 public static LocalDate getFirstDayOfNextMonth(LocalDate date) {
57 return date.plusMonths(1).with(TemporalAdjusters.firstDayOfMonth());
58 }
59}
使用DateTimeUtil工具类
-
获取当前日期时间
Java深色版本
1LocalDateTime currentDateTime = DateTimeUtil.now(); 2System.out.println("Current DateTime: " + DateTimeUtil.format(currentDateTime));
-
日期字符串转换
Java深色版本
1LocalDate parsedDate = DateTimeUtil.parseDate("2023-03-15"); 2System.out.println("Parsed Date: " + DateTimeUtil.format(parsedDate));
-
计算日期差
Java深色版本
1LocalDate startDate = LocalDate.of(2023, 1, 1); 2LocalDate endDate = LocalDate.of(2023, 1, 31); 3long daysBetween = DateTimeUtil.betweenDays(startDate, endDate); 4System.out.println("Days Between: " + daysBetween);
-
获取月份的最后一天和下月第一天
Java深色版本
1LocalDate today = DateTimeUtil.today(); 2LocalDate lastDayOfMonth = DateTimeUtil.getLastDayOfMonth(today); 3LocalDate firstDayOfNextMonth = DateTimeUtil.getFirstDayOfNextMonth(today); 4System.out.println("Last Day of Month: " + DateTimeUtil.format(lastDayOfMonth)); 5System.out.println("First Day of Next Month: " + DateTimeUtil.format(firstDayOfNextMonth));
总结
DateTimeUtil
工具类封装了java.time
包下的常用日期时间操作,简化了日期时间的处理流程,提高了代码的可读性和可维护性。通过使用这个工具类,开发者可以更专注于业务逻辑的实现,而不必担心日期时间处理的细节。希望这个工具类能够帮助你在Java开发中更高效、更准确地处理日期时间相关的需求。