java日期工具类(DateUtil)

简介: java日期工具类(DateUtil)

1.日期字符串之间的转换

2.日期中的天数月数差值

3.日期比较大小

4.指定日期,加减年月日

5.获取当前月,当前天

 
 
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
 
public class DateUtil {
 
    public static void main(String[] args) {
 
    }
 
    /**
     * 默认显示日期时间的格式 yyyyMMdd
     */
    public static final String YYYYMMDD = "yyyyMMdd";
    /**
     * 默认显示日期时间的格式 yyyyMMddHHmmss
     */
    public static final String YYYYMMDDHHMMSS = "yyyyMMddHHmmss";
    /**
     * 默认显示日期的格式 yyyy-MM-dd
     */
    public static final String YYYY_MM_DD = "yyyy-MM-dd";
 
    /**
     * 默认显示日期时间的格式 yyyy-MM-dd HH:mm:ss
     */
    public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";
    /**
     * 默认显示日期时间的格式yyyy-MM年月
     */
    public static final String YYYY_MM = "yyyy-MM";
 
    /**
     * 计算两个日期之间的天数差
     *
     * @param startDate  起始日期
     * @param endDate    结束日期
     * @param ignoreTime 是否忽略时间(只比较日期,不比较时间)
     * @return 日期差
     */
    public static int getDaysBetween(Date startDate, Date endDate, boolean ignoreTime) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(startDate);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        long startTime = cal.getTimeInMillis();
        cal.setTime(endDate);
        cal.set(Calendar.HOUR_OF_DAY, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MILLISECOND, 0);
        long endTime = cal.getTimeInMillis();
        if (ignoreTime) {
            return (int) ((endTime - startTime) / (1000 * 3600 * 24));
        } else {
            return (int) ((endTime - startTime) / (24 * 60 * 60 * 1000));
        }
    }
 
    /*
     * 计算两个日期之间的月数差
     * @param startDate 起始日期
     * @param endDate 结束日期
     * @return 月数差
     */
    public static int getMonthsBetween(Date startDate, Date endDate) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(startDate);
        int startYear = cal.get(Calendar.YEAR);
        int startMonth = cal.get(Calendar.MONTH);
        cal.setTime(endDate);
        int endYear = cal.get(Calendar.YEAR);
        int endMonth = cal.get(Calendar.MONTH);
        return (endYear - startYear) * 12 + (endMonth - startMonth);
    }
 
    /*
     * 计算两个日期之间的年数差
     * @param startDate 起始日期
     * @param endDate 结束日期
     * @return 年数差
     */
    public static int getYearsBetween(Date startDate, Date endDate) {
        Calendar cal = Calendar.getInstance();
        cal.setTime(startDate);
        int startYear = cal.get(Calendar.YEAR);
        cal.setTime(endDate);
        int endYear = cal.get(Calendar.YEAR);
        return endYear - startYear;
    }
 
    /*
     * 将日期转换为字符串
     * @param date 日期
     * @param format 日期格式
     * @return 日期字符串
     */
    public static String formatDate(Date date, String format) {
        if (date == null) {
            return null;
        }
        DateFormat df = new SimpleDateFormat(format);
        return df.format(date);
    }
 
    /*
     * 将字符串转换为日期
     * @param strDate 日期字符串
     * @param format 日期格式
     * @return 日期
     * @throws ParseException 解析异常
     */
    public static Date parseDate(String strDate, String format) throws ParseException {
        if (strDate == null || format == null) {
            return null;
        }
        DateFormat df = new SimpleDateFormat(format);
        return df.parse(strDate);
    }
 
    /*
     * 比较两个日期的大小
     * @param date1 日期1
     * @param date2 日期2
     * @return 0:相等,1:date1 > date2,-1:date1 < date2
     */
    public static int compareDate(Date date1, Date date2) {
        if (date1 == null || date2 == null) {
            return 0;
        }
        long time1 = date1.getTime();
        long time2 = date2.getTime();
        if (time1 == time2) {
            return 0;
        } else if (time1 > time2) {
            return 1;
        } else {
            return -1;
        }
    }
 
    /*
     * 将日期转换成指定格式的字符串
     * @param date 日期
     * @param format 格式
     * @return 格式化后的日期字符串
     * @throws IllegalArgumentException 如果日期或格式为空
     */
    public static String format(Date date, String format) {
        if (date == null || format == null) {
            throw new IllegalArgumentException("Date and format must not be null");
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(date);
    }
 
    /*
     * 将字符串转换成指定格式的日期
     * @param dateString 日期字符串
     * @param format 日期格式
     * @return 日期
     * @throws ParseException 解析异常
     * @throws IllegalArgumentException 如果日期字符串或格式为空
     */
    public static Date parse(String dateString, String format) throws ParseException {
        if (dateString == null || format == null) {
            throw new IllegalArgumentException("Date string and format must not be null");
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.parse(dateString);
    }
 
    /**
     * 指定日期并且增加年份(b为true加反之减)
     *
     * @param date
     * @param years
     * @param b
     * @return
     */
    public static Date addYears(Date date, int years, boolean b) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        if (b) {
            calendar.add(Calendar.YEAR, years);
        } else {
            calendar.add(Calendar.YEAR, -years);
        }
        return calendar.getTime();
    }
 
    /**
     * 指定日期并且增加月份(b为true加反之减)
     *
     * @param date
     * @param months
     * @param b
     * @return
     */
    public static Date addMonth(Date date, int months, boolean b) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        if (b) {
            calendar.add(Calendar.MONTH, months);
        } else {
            calendar.add(Calendar.MONTH, -months);
        }
        return calendar.getTime();
    }
 
    /**
     * 指定日期并且增加天数(b为true加反之减)
     *
     * @param date
     * @param days
     * @param b
     * @return
     */
    public static Date addDays(Date date, int days, boolean b) {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        if (b) {
            calendar.add(Calendar.DATE, days);
        } else {
            calendar.add(Calendar.DATE, -days);
        }
        return calendar.getTime();
    }
 
    /**
     * 当前月
     *
     * @return
     */
    public static int getCurrentMonth() {
        Calendar calendar = Calendar.getInstance();
        int i = calendar.get(Calendar.MONTH) + 1;
        return i;
    }
 
    /**
     * 获取当前时间 天数
     *
     * @return
     */
    public static int getCurrentDay() {
        return Calendar.getInstance().get(Calendar.DATE);
    }
}


相关文章
|
10月前
|
存储 Java 程序员
【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
370 0
|
12月前
|
存储 Java
Java LocalDateTime与hutool DateUtil实现秒转换为时分秒格式化展示。
注意:以上代码示例仅适合于处理小于24小时内(86400s) 总积 因 LocalDateTime 和 Local Time 不支持超过24小时表达而 huo tool示例虽然理论上支持但未考虑超过24小时情况下可能出现负值等异常情况处理细节需用户自行添加相关逻辑以确保正确性.
673 7
|
监控 Java API
Java语言按文件创建日期排序及获取最新文件的技术
这段代码实现了文件创建时间的读取、文件列表的获取与排序以及获取最新文件的需求。它具备良好的效率和可读性,对于绝大多数处理文件属性相关的需求来说足够健壮。在实际应用中,根据具体情况,可能还需要进一步处理如访问权限不足、文件系统不支持某些属性等边界情况。
533 14
|
12月前
|
安全 Java API
Java日期时间API:从Date到Java.time
本文深入解析了Java 8中引入的全新日期时间API,涵盖LocalDate、LocalTime、LocalDateTime、ZonedDateTime等核心类的使用,以及时间调整、格式化、时区处理和与旧API的互操作。通过实例对比,展示了新API在可变性、线程安全与易用性方面的显著优势,并提供迁移方案与实战技巧,助你掌握现代Java时间处理的最佳实践。
|
Java 数据库
java小工具util系列1:日期和字符串转换工具
java小工具util系列1:日期和字符串转换工具
373 26
|
人工智能 JSON Java
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
525 0
|
Java API 调度
Java 日期与时间处理:精准掌控时间流转
Java 8引入了全新的日期和时间API,解决了旧版`java.util.Date`和`Calendar`类设计不佳、操作繁琐的问题。新API包括`LocalDate`、`LocalTime`和`LocalDateTime`类,操作简洁直观,符合日常思维习惯。同时提供了`Period`和`Duration`处理时间间隔,以及`DateTimeFormatter`进行格式化输出。这些改进使开发者能更高效、准确地处理日期和时间,极大提升了开发效率与代码质量。 (239字符)
395 6
|
安全 Java API
告别SimpleDateFormat:Java 8日期时间API的最佳实践
在Java开发中,处理日期和时间是一个基本而重要的任务。传统的`SimpleDateFormat`类因其简单易用而被广泛采用,但它存在一些潜在的问题,尤其是在多线程环境下。本文将探讨`SimpleDateFormat`的局限性,并介绍Java 8引入的新的日期时间API,以及如何使用这些新工具来避免潜在的风险。
406 5
|
Java API
Java的日期类都是怎么用的
【10月更文挑战第1天】本文介绍了 Java 中处理日期和时间的三个主要类:`java.util.Date`、`java.util.Calendar` 和 `java.time` 包下的新 API。`Date` 类用于表示精确到毫秒的瞬间,可通过时间戳创建或获取当前日期;`Calendar` 抽象类提供丰富的日期操作方法,如获取年月日及时区转换;`java.time` 包中的 `LocalDate`、`LocalTime`、`LocalDateTime` 和 `ZonedDateTime` 等类则提供了更为现代和灵活的日期时间处理方式,支持时区和复杂的时间计算。
303 14
|
前端开发 JavaScript Java
【前端学java】java中的日期操作(13)
【8月更文挑战第10天】java中的日期操作
266 2
【前端学java】java中的日期操作(13)