以下是一个Java日期处理工具类代码示例,基于Java 8的java.time
包实现日期加减、比较和格式化功能:
日期处理工具类代码
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
public class DateUtils {
/**
* 日期加减(按天数)
* @param date 原始日期
* @param days 增减天数(正数为加,负数为减)
* @return 计算后的日期
*/
public static LocalDate addDays(LocalDate date, long days) {
return date.plusDays(days);
}
/**
* 日期加减(按月数)
* @param date 原始日期
* @param months 增减月数(正数为加,负数为减)
* @return 计算后的日期
*/
public static LocalDate addMonths(LocalDate date, long months) {
return date.plusMonths(months);
}
/**
* 日期加减(按年数)
* @param date 原始日期
* @param years 增减年数(正数为加,负数为减)
* @return 计算后的日期
*/
public static LocalDate addYears(LocalDate date, long years) {
return date.plusYears(years);
}
/**
* 比较两个日期大小
* @param date1 日期1
* @param date2 日期2
* @return 如果date1在date2之后返回1,之前返回-1,相等返回0
*/
public static int compareDates(LocalDate date1, LocalDate date2) {
return date1.compareTo(date2);
}
/**
* 计算两个日期之间的天数差
* @param startDate 开始日期
* @param endDate 结束日期
* @return 天数差
*/
public static long daysBetween(LocalDate startDate, LocalDate endDate) {
return ChronoUnit.DAYS.between(startDate, endDate);
}
/**
* 日期转字符串(默认格式:yyyy-MM-dd)
* @param date 日期
* @return 格式化后的字符串
*/
public static String formatDate(LocalDate date) {
return formatDate(date, "yyyy-MM-dd");
}
/**
* 日期转字符串(自定义格式)
* @param date 日期
* @param pattern 格式模式
* @return 格式化后的字符串
*/
public static String formatDate(LocalDate date, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return date.format(formatter);
}
/**
* 字符串转日期(默认格式:yyyy-MM-dd)
* @param dateStr 日期字符串
* @return 解析后的日期
*/
public static LocalDate parseDate(String dateStr) {
return parseDate(dateStr, "yyyy-MM-dd");
}
/**
* 字符串转日期(自定义格式)
* @param dateStr 日期字符串
* @param pattern 格式模式
* @return 解析后的日期
*/
public static LocalDate parseDate(String dateStr, String pattern) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
return LocalDate.parse(dateStr, formatter);
}
/**
* LocalDate转Date
* @param localDate LocalDate对象
* @return Date对象
*/
public static java.util.Date toUtilDate(LocalDate localDate) {
return java.util.Date.from(localDate.atStartOfDay(ZoneId.systemDefault()).toInstant());
}
/**
* Date转LocalDate
* @param date Date对象
* @return LocalDate对象
*/
public static LocalDate toLocalDate(java.util.Date date) {
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
/**
* LocalDateTime转Date
* @param localDateTime LocalDateTime对象
* @return Date对象
*/
public static java.util.Date toUtilDate(LocalDateTime localDateTime) {
return java.util.Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());
}
/**
* Date转LocalDateTime
* @param date Date对象
* @return LocalDateTime对象
*/
public static LocalDateTime toLocalDateTime(java.util.Date date) {
return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
}
}
使用示例
public class Main {
public static void main(String[] args) {
// 日期加减示例
LocalDate today = LocalDate.now();
LocalDate nextWeek = DateUtils.addDays(today, 7);
System.out.println("一周后: " + DateUtils.formatDate(nextWeek));
// 日期比较示例
LocalDate date1 = LocalDate.of(2023, 1, 1);
LocalDate date2 = LocalDate.of(2023, 12, 31);
System.out.println("比较结果: " + DateUtils.compareDates(date1, date2));
// 日期格式化示例
String formatted = DateUtils.formatDate(today, "yyyy/MM/dd");
System.out.println("格式化日期: " + formatted);
// 字符串转日期示例
LocalDate parsed = DateUtils.parseDate("2023-05-15");
System.out.println("解析日期: " + parsed);
// 日期类型转换示例
java.util.Date utilDate = DateUtils.toUtilDate(today);
LocalDate convertedBack = DateUtils.toLocalDate(utilDate);
System.out.println("转换后日期: " + convertedBack);
}
}
功能说明
该工具类提供以下主要功能:
日期加减
支持按天、月、年进行日期增减操作,使用plusDays()
、plusMonths()
和plusYears()
方法实现。
日期比较
通过compareTo()
方法比较两个日期,返回1、-1或0表示日期先后关系。
日期格式化
支持将日期格式化为字符串,可自定义格式模式或使用默认格式"yyyy-MM-dd"。
字符串转日期
支持从字符串解析日期,可自定义格式模式或使用默认格式。
日期类型转换
提供java.util.Date
与LocalDate
、LocalDateTime
之间的相互转换方法。
计算日期差
使用ChronoUnit.DAYS.between()
方法计算两个日期之间的天数差。
该工具类基于Java 8的日期时间API,线程安全且易于使用,适合大多数日期处理场景。