DateUtils案例

wen java案例 3

本文目录导读:

DateUtils案例

  1. 基础日期工具类
  2. 高级日期工具类(Java 8+)
  3. 使用示例
  4. 实际业务场景案例

我来为您提供几个常用的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;
    }
}

这些工具类覆盖了日常开发中最常用的日期处理场景,您可以根据实际需求选择使用,如果需要更多特定功能的实现,欢迎继续询问!

抱歉,评论功能暂时关闭!