本文目录导读:

我来为您提供几个常用的DateUtils工具类案例,涵盖日期处理的各种常见场景。
基础日期工具类
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
public class DateUtils {
private static final String DEFAULT_PATTERN = "yyyy-MM-dd HH:mm:ss";
private static final String DATE_PATTERN = "yyyy-MM-dd";
private static final String TIME_PATTERN = "HH:mm:ss";
/**
* 格式化日期
*/
public static String format(Date date) {
return format(date, DEFAULT_PATTERN);
}
public static String format(Date date, String pattern) {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.format(date);
}
/**
* 字符串转日期
*/
public static Date parse(String dateStr) throws ParseException {
return parse(dateStr, DEFAULT_PATTERN);
}
public static Date parse(String dateStr, String pattern) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
return sdf.parse(dateStr);
}
/**
* 获取当前时间字符串
*/
public static String getNow() {
return format(new Date());
}
/**
* 获取今天的开始时间(00:00:00)
*/
public static Date getStartOfDay() {
return getStartOfDay(new Date());
}
public static Date getStartOfDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar.getTime();
}
/**
* 获取今天的结束时间(23:59:59)
*/
public static Date getEndOfDay() {
return getEndOfDay(new Date());
}
public static Date getEndOfDay(Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
calendar.set(Calendar.MILLISECOND, 999);
return calendar.getTime();
}
/**
* 日期加减天数
*/
public static Date addDays(Date date, int days) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, days);
return calendar.getTime();
}
/**
* 日期加减月数
*/
public static Date addMonths(Date date, int months) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.MONTH, months);
return calendar.getTime();
}
/**
* 日期加减年数
*/
public static Date addYears(Date date, int years) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
calendar.add(Calendar.YEAR, years);
return calendar.getTime();
}
/**
* 计算两个日期之间的天数差
*/
public static long daysBetween(Date startDate, Date endDate) {
long start = getStartOfDay(startDate).getTime();
long end = getStartOfDay(endDate).getTime();
return (end - start) / (1000 * 60 * 60 * 24);
}
/**
* 判断是否同一天
*/
public static boolean isSameDay(Date date1, Date date2) {
Calendar cal1 = Calendar.getInstance();
Calendar cal2 = Calendar.getInstance();
cal1.setTime(date1);
cal2.setTime(date2);
return cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR)
&& cal1.get(Calendar.DAY_OF_YEAR) == cal2.get(Calendar.DAY_OF_YEAR);
}
/**
* 获取本周第一天(周一)
*/
public static Date getFirstDayOfWeek() {
Calendar calendar = Calendar.getInstance();
calendar.setFirstDayOfWeek(Calendar.MONDAY);
calendar.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
return getStartOfDay(calendar.getTime());
}
/**
* 获取本月第一天
*/
public static Date getFirstDayOfMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, 1);
return getStartOfDay(calendar.getTime());
}
/**
* 获取下个月的当前月份第一天的上一天(本月最后一天)
*/
public static Date getLastDayOfMonth() {
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH,
calendar.getActualMaximum(Calendar.DAY_OF_MONTH));
return getEndOfDay(calendar.getTime());
}
/**
* 获取上周日期
*/
public static Date getLastWeekDate(Date date) {
return addDays(date, -7);
}
/**
* 获取明天
*/
public static Date getTomorrow() {
return addDays(new Date(), 1);
}
/**
* 获取昨天
*/
public static Date getYesterday() {
return addDays(new Date(), -1);
}
}
高级日期工具类(Java 8+)
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalAdjusters;
public class DateUtils8 {
private static final DateTimeFormatter DEFAULT_FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
private static final DateTimeFormatter DATE_FORMATTER =
DateTimeFormatter.ofPattern("yyyy-MM-dd");
// LocalDate 相关方法
public static String formatLocalDate(LocalDate date) {
return date.format(DATE_FORMATTER);
}
// LocalDateTime 相关方法
public static String formatLocalDateTime(LocalDateTime dateTime) {
return dateTime.format(DEFAULT_FORMATTER);
}
// 字符串转LocalDate
public static LocalDate parseToLocalDate(String dateStr) {
return LocalDate.parse(dateStr, DATE_FORMATTER);
}
// 获取当前日期
public static LocalDate getToday() {
return LocalDate.now();
}
// 获取当前时间
public static LocalDateTime getNow() {
return LocalDateTime.now();
}
// 日期加减
public static LocalDate plusDays(LocalDate date, long days) {
return date.plusDays(days);
}
public static LocalDate minusDays(LocalDate date, long days) {
return date.minusDays(days);
}
// 获取当月的第一天
public static LocalDate getFirstDayOfMonth(LocalDate date) {
return date.with(TemporalAdjusters.firstDayOfMonth());
}
// 获取当月的最后一天
public static LocalDate getLastDayOfMonth(LocalDate date) {
return date.with(TemporalAdjusters.lastDayOfMonth());
}
// 计算两个日期之间的天数
public static long daysBetween(LocalDate startDate, LocalDate endDate) {
return ChronoUnit.DAYS.between(startDate, endDate);
}
// 获取季节
public static String getSeason(LocalDate date) {
int month = date.getMonthValue();
if (month >= 3 && month <= 5) return "春季";
if (month >= 6 && month <= 8) return "夏季";
if (month >= 9 && month <= 11) return "秋季";
return "冬季";
}
// 判断是否是闰年
public static boolean isLeapYear(LocalDate date) {
return date.isLeapYear();
}
// 获取年龄
public static int getAge(LocalDate birthDate) {
return Period.between(birthDate, LocalDate.now()).getYears();
}
// 获取工作日的上一个工作日
public static LocalDate getPreviousWorkday(LocalDate date) {
LocalDate result = date.minusDays(1);
while (result.getDayOfWeek() == DayOfWeek.SATURDAY ||
result.getDayOfWeek() == DayOfWeek.SUNDAY) {
result = result.minusDays(1);
}
return result;
}
// 获取下一个工作日
public static LocalDate getNextWorkday(LocalDate date) {
LocalDate result = date.plusDays(1);
while (result.getDayOfWeek() == DayOfWeek.SATURDAY ||
result.getDayOfWeek() == DayOfWeek.SUNDAY) {
result = result.plusDays(1);
}
return result;
}
// 获取某个月份有多少天
public static int getDaysInMonth(int year, int month) {
return YearMonth.of(year, month).lengthOfMonth();
}
// 时间戳转LocalDateTime
public static LocalDateTime timestampToLocalDateTime(long timestamp) {
return LocalDateTime.ofInstant(
Instant.ofEpochMilli(timestamp), ZoneId.systemDefault()
);
}
// LocalDateTime转时间戳
public static long localDateTimeToTimestamp(LocalDateTime dateTime) {
return dateTime.atZone(ZoneId.systemDefault()).toInstant().toEpochMilli();
}
// 获取两个日期之间的所有日期
public static List<LocalDate> getDatesBetween(LocalDate startDate, LocalDate endDate) {
List<LocalDate> dates = new ArrayList<>();
LocalDate current = startDate;
while (!current.isAfter(endDate)) {
dates.add(current);
current = current.plusDays(1);
}
return dates;
}
}
使用示例
public class DateUtilsDemo {
public static void main(String[] args) throws ParseException {
// 使用传统DateUtil
System.out.println("=== 传统工具类使用 ===");
Date now = new Date();
// 格式化日期
System.out.println("当前时间: " + DateUtils.format(now));
System.out.println("日期格式: " + DateUtils.format(now, "yyyy年MM月dd日"));
// 日期加减
Date tomorrow = DateUtils.addDays(now, 1);
System.out.println("明天: " + DateUtils.format(tomorrow));
Date lastMonth = DateUtils.addMonths(now, -1);
System.out.println("上个月: " + DateUtils.format(lastMonth));
// 计算天数差
Date startDate = DateUtils.parse("2024-01-01", "yyyy-MM-dd");
long days = DateUtils.daysBetween(startDate, now);
System.out.println("从2024年1月1日到今天已过: " + days + "天");
// 今天是周几
Calendar cal = Calendar.getInstance();
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
String[] weekDays = {"", "周日", "周一", "周二", "周三", "周四", "周五", "周六"};
System.out.println("今天是: " + weekDays[dayOfWeek]);
// 使用Java 8日期工具类
System.out.println("\n=== Java 8工具类使用 ===");
LocalDate today = LocalDate.now();
System.out.println(" " + DateUtils8.formatLocalDate(today));
System.out.println("当前时间: " + DateUtils8.formatLocalDateTime(LocalDateTime.now()));
// 获取年龄
LocalDate birthDate = LocalDate.of(2000, 1, 15);
System.out.println("年龄: " + DateUtils8.getAge(birthDate) + "岁");
// 获取季节
System.out.println("当前季节: " + DateUtils8.getSeason(today));
// 获取当前月份天数
int daysInMonth = DateUtils8.getDaysInMonth(today.getYear(), today.getMonthValue());
System.out.println("本月有: " + daysInMonth + "天");
// 获取最近的日期
System.out.println("昨天: " + DateUtils8.minusDays(today, 1));
System.out.println("明天: " + DateUtils8.plusDays(today, 1));
// 计算两个日期之间的所有日期
LocalDate start = LocalDate.of(2024, 1, 1);
LocalDate end = LocalDate.of(2024, 1, 7);
List<LocalDate> dateList = DateUtils8.getDatesBetween(start, end);
System.out.println("2024年1月1日至1月7日之间的日期:");
dateList.forEach(date -> System.out.println(" " + date));
}
}
实际业务场景案例
// 业务场景:判断是否为工作日(简单版,不含节假日)
public class BusinessDateUtils {
// 判断是否为工作日
public static boolean isWorkday(LocalDate date) {
DayOfWeek dayOfWeek = date.getDayOfWeek();
return dayOfWeek != DayOfWeek.SATURDAY && dayOfWeek != DayOfWeek.SUNDAY;
}
// 计算两个日期之间的工作日数量
public static long countWorkdays(LocalDate startDate, LocalDate endDate) {
long workdays = 0;
LocalDate current = startDate;
while (!current.isAfter(endDate)) {
if (isWorkday(current)) {
workdays++;
}
current = current.plusDays(1);
}
return workdays;
}
// 获取某月的第一个工作日
public static LocalDate getFirstWorkdayOfMonth(LocalDate date) {
LocalDate firstDay = date.withDayOfMonth(1);
while (!isWorkday(firstDay)) {
firstDay = firstDay.plusDays(1);
}
return firstDay;
}
// 计算到期日(排除周末)
public static LocalDate calculateDueDate(LocalDate startDate, int workdays) {
LocalDate dueDate = startDate;
int countedDays = 0;
while (countedDays < workdays) {
dueDate = dueDate.plusDays(1);
if (isWorkday(dueDate)) {
countedDays++;
}
}
return dueDate;
}
}
这些工具类覆盖了日常开发中最常用的日期处理场景,您可以根据实际需求选择使用,如果需要更多特定功能的实现,欢迎继续询问!