Java日期处理工具类

本文详细介绍了Java中处理日期时间的常用方法,包括使用Calendar类进行日期操作、使用Date类获取当前日期、求日期之间的间隔天数以及如何格式化日期。通过实例演示了如何获取昨天、明天的日期,计算日期之间的差距,以及获取特定日期的年、月、日等信息。

以下是一个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.DateLocalDateLocalDateTime之间的相互转换方法。

计算日期差
使用ChronoUnit.DAYS.between()方法计算两个日期之间的天数差。

该工具类基于Java 8的日期时间API,线程安全且易于使用,适合大多数日期处理场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值