All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cntool.core.date.DateUtils Maven / Gradle / Ivy

The newest version!
package com.cntool.core.date;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * {@code @program:} cn-tool
 * {@code @description:} 日期工具类
 * {@code @author:} ID-Tang
 * {@code @create:} 2022-01-17 10:04
 * {@code @copyright:} Copyright (c) [2022] [ID-tang]
 * [cntool] is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 * ...
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 **/
public class DateUtils extends ToolMethods {
    /**
     * 获取当前年月
     *
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static String now() {
        return monthToStrCalendar(null, null, null, null);
    }

    /**
     * 获取指定格式的当前日期
     *
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static String now(String pattern) {
        return monthToStrCalendar(null, null, null, pattern);
    }

    /**
     * 获取当前年月
     *
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static Date nowToDate() {
        return monthToDateCalendar(null, null, null, null);
    }

    /**
     * 获取指定格式的当前日期
     *
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static Date nowToDate(String pattern) {
        return monthToDateCalendar(null, null, null, pattern);
    }

    /*=====================================================   年   =====================================================*/

    /**
     * 当前年份往前/后推几年
     *
     * @param len 要推的年数 例:往前推一年 -1
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static String yearMove(int len) {
        return yearToStrCalendar(null, null, len, null);
    }

    /**
     * 当前年份往前/后推几年
     * 该方法可以指定日期格式
     *
     * @param len     要推的年数 例:往前推一年 -1
     * @param pattern 指定日期格式
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static String yearMove(int len, String pattern) {
        return yearToStrCalendar(null, null, len, pattern);
    }

    /**
     * 年份往前/后推几年
     * 当前方法为指定开始日期,并且开始日期为String类型的
     *
     * @param date 起始年月
     * @param len  要推的年数 例:往前推一年 -1
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static String yearMove(String date, int len) {
        return yearToStrCalendar(null, date, len, null);
    }

    /**
     * 年份往前/后推几年
     * 当前方法为指定开始日期,并且开始日期为String类型的
     * 该方法可以指定日期格式
     *
     * @param date    起始年月
     * @param len     要推的年数 例:往前推一年 -1
     * @param pattern 指定日期格式
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static String yearMove(String date, int len, String pattern) {
        return yearToStrCalendar(null, date, len, pattern);
    }

    /**
     * 年份往前/后推几年
     * 当前方法为指定开始日期,并且开始日期为Date类型的
     *
     * @param date 起始年月
     * @param len  要推的年数 例:往前推一年 -1
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static String yearMove(Date date, int len) {
        return yearToStrCalendar(date, null, len, null);
    }

    /**
     * 年份往前/后推几年
     * 当前方法为指定开始日期,并且开始日期为Date类型的
     * 该方法可以指定日期格式
     *
     * @param date    起始年月
     * @param len     要推的年数 例:往前推一年 -1
     * @param pattern 指定日期格式
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static String yearMove(Date date, int len, String pattern) {
        return yearToStrCalendar(date, null, len, pattern);
    }

    /**
     * 当前年份往前/后推几年
     *
     * @param len 要推的年数 例:往前推一年 -1
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static Date yearMoveToDate(int len) {
        return yearToDateCalendar(null, null, len, null);
    }

    /**
     * 当前年份往前/后推几年
     * 该方法可以指定日期格式
     *
     * @param len     要推的年数 例:往前推一年 -1
     * @param pattern 指定日期格式
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static Date yearMoveToDate(int len, String pattern) {
        return yearToDateCalendar(null, null, len, pattern);
    }

    /**
     * 年份往前/后推几年
     * 当前方法为指定开始日期,并且开始日期为String类型的
     *
     * @param date 起始年月
     * @param len  要推的年数 例:往前推一年 -1
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static Date yearMoveToDate(String date, int len) {
        return yearToDateCalendar(null, date, len, null);
    }

    /**
     * 年份往前/后推几年
     * 当前方法为指定开始日期,并且开始日期为String类型的
     * 该方法可以指定日期格式
     *
     * @param date    起始年月
     * @param len     要推的年数 例:往前推一年 -1
     * @param pattern 指定日期格式
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static Date yearMoveToDate(String date, int len, String pattern) {
        return yearToDateCalendar(null, date, len, pattern);
    }

    /**
     * 年份往前/后推几年
     * 当前方法为指定开始日期,并且开始日期为Date类型的
     *
     * @param date 起始年月
     * @param len  要推的年数 例:往前推一年 -1
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static Date yearMoveToDate(Date date, int len) {
        return yearToDateCalendar(date, null, len, null);
    }

    /**
     * 年份往前/后推几年
     * 当前方法为指定开始日期,并且开始日期为Date类型的
     * 该方法可以指定日期格式
     *
     * @param date    起始年月
     * @param len     要推的年数 例:往前推一年 -1
     * @param pattern 指定日期格式
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static Date yearMoveToDate(Date date, int len, String pattern) {
        return yearToDateCalendar(date, null, len, pattern);
    }

    /**
     * 去年
     *
     * @return 去年日期
     */
    public static String lastYear() {
        return yearToStrCalendar(null, null, -1, null);
    }

    /**
     * 去年
     *
     * @param pattern 格式化格式
     * @return 去年日期(指定格式)
     */
    public static String lastYear(String pattern) {
        return yearToStrCalendar(null, null, -1, pattern);
    }

    /**
     * 去年
     *
     * @return 去年日期
     */
    public static Date lastYearToDate() {
        return yearToDateCalendar(null, null, -1, null);
    }

    /**
     * 去年
     *
     * @param pattern 格式化格式
     * @return 去年(指定格式)
     */
    public static Date lastYearToDate(String pattern) {
        return yearToDateCalendar(null, null, -1, pattern);
    }

    /**
     * 明年
     * 返回字符串格式的
     *
     * @return 明年日期
     */
    public static String nextYear() {
        return yearToStrCalendar(null, null, 1, null);
    }

    /**
     * 明年
     * 返回字符串格式的
     *
     * @param pattern 格式化格式
     * @return 明年日期
     */
    public static String nextYear(String pattern) {
        return yearToStrCalendar(null, null, 1, pattern);
    }

    /**
     * 明年
     * 返回Date格式的
     *
     * @return 明年日期
     */
    public static Date nextYearToDate() {
        return yearToDateCalendar(null, null, 1, null);
    }

    /**
     * 明年
     * 返回Date格式的
     *
     * @param pattern 格式化格式
     * @return 明年日期
     */
    public static Date nextYearToDate(String pattern) {
        return yearToDateCalendar(null, null, 1, pattern);
    }

    /*=====================================================   月   =====================================================*/

    /**
     * 当前月份往前/后推几个月
     *
     * @param len 要推的月数 例:往前推一个月 -1
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static String monthMove(int len) {
        return monthToStrCalendar(null, null, len, null);
    }

    /**
     * 当前月份往前/后推几个月
     * 该方法可以指定日期格式
     *
     * @param len     要推的月数 例:往前推一个月 -1
     * @param pattern 指定日期格式
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static String monthMove(int len, String pattern) {
        return monthToStrCalendar(null, null, len, pattern);
    }

    /**
     * 月份往前/后推几个月
     * 当前方法为指定开始日期,并且开始日期为String类型的
     *
     * @param date 起始年月
     * @param len  要推的月数 例:往前推一个月 -1
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static String monthMove(String date, int len) {
        return monthToStrCalendar(null, date, len, null);
    }

    /**
     * 月份往前/后推几个月
     * 当前方法为指定开始日期,并且开始日期为String类型的
     * 该方法可以指定日期格式
     *
     * @param date    起始年月
     * @param len     要推的月数 例:往前推一个月 -1
     * @param pattern 指定日期格式
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static String monthMove(String date, int len, String pattern) {
        return monthToStrCalendar(null, date, len, pattern);
    }

    /**
     * 月份往前/后推几个月
     * 当前方法为指定开始日期,并且开始日期为Date类型的
     *
     * @param date 起始年月
     * @param len  要推的月数 例:往前推一个月 -1
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static String monthMove(Date date, int len) {
        return monthToStrCalendar(date, null, len, null);
    }

    /**
     * 月份往前/后推几个月
     * 当前方法为指定开始日期,并且开始日期为Date类型的
     * 该方法可以指定日期格式
     *
     * @param date    起始年月
     * @param len     要推的月数 例:往前推一个月 -1
     * @param pattern 指定日期格式
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static String monthMove(Date date, int len, String pattern) {
        return monthToStrCalendar(date, null, len, pattern);
    }

    /**
     * 当前月份往前/后推几个月
     *
     * @param len 要推的月数 例:往前推一个月 -1
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static Date monthMoveToDate(int len) {
        return monthToDateCalendar(null, null, len, null);
    }

    /**
     * 当前月份往前/后推几个月
     * 该方法可以指定日期格式
     *
     * @param len     要推的月数 例:往前推一个月 -1
     * @param pattern 指定日期格式
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static Date monthMoveToDate(int len, String pattern) {
        return monthToDateCalendar(null, null, len, pattern);
    }

    /**
     * 月份往前/后推几个月
     * 当前方法为指定开始日期,并且开始日期为String类型的
     *
     * @param date 起始年月
     * @param len  要推的月数 例:往前推一个月 -1
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static Date monthMoveToDate(String date, int len) {
        return monthToDateCalendar(null, date, len, null);
    }

    /**
     * 月份往前/后推几个月
     * 当前方法为指定开始日期,并且开始日期为String类型的
     * 该方法可以指定日期格式
     *
     * @param date    起始年月
     * @param len     要推的月数 例:往前推一个月 -1
     * @param pattern 指定日期格式
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static Date monthMoveToDate(String date, int len, String pattern) {
        return monthToDateCalendar(null, date, len, pattern);
    }

    /**
     * 月份往前/后推几个月
     * 当前方法为指定开始日期,并且开始日期为Date类型的
     *
     * @param date 起始年月
     * @param len  要推的月数 例:往前推一个月 -1
     * @return 默认格式的日期 例:2022-01-01 14:22:10
     */
    public static Date monthMoveToDate(Date date, int len) {
        return monthToDateCalendar(date, null, len, null);
    }

    /**
     * 月份往前/后推几个月
     * 当前方法为指定开始日期,并且开始日期为Date类型的
     * 该方法可以指定日期格式
     *
     * @param date    起始年月
     * @param len     要推的月数 例:往前推一个月 -1
     * @param pattern 指定日期格式
     * @return 指定格式的日期 例指定格式为'yyyy-MM':2022-01
     */
    public static Date monthMoveToDate(Date date, int len, String pattern) {
        return monthToDateCalendar(date, null, len, pattern);
    }

    /**
     * 上个月
     * 返回数据类型为String
     *
     * @return 格式化后的上个月
     */
    public static String lastMonth() {
        return monthToStrCalendar(null, null, -1, null);
    }

    /**
     * 上个月
     * 返回数据类型为String
     *
     * @param pattern 指定格式化格式
     * @return 格式化后的上个月
     */
    public static String lastMonth(String pattern) {
        return monthToStrCalendar(null, null, -1, pattern);
    }

    /**
     * 上个月
     * 返回数据类型为Date
     *
     * @return 格式化后的上个月
     */
    public static Date lastMonthToDate() {
        return monthToDateCalendar(null, null, -1, null);
    }

    /**
     * 上个月
     * 返回数据类型为Date
     *
     * @param pattern 指定格式化格式
     * @return 格式化后的上个月
     */
    public static Date lastMonthToDate(String pattern) {
        return monthToDateCalendar(null, null, -1, pattern);
    }

    /**
     * 下个月
     * 返回数据数据类型为String
     *
     * @return 格式化后的下个月
     */
    public static String nextMonth() {
        return monthToStrCalendar(null, null, 1, null);
    }

    /**
     * 下个月
     * 返回数据数据类型为String
     *
     * @param pattern 指定格式化格式
     * @return 格式化后的下个月
     */
    public static String nextMonth(String pattern) {
        return monthToStrCalendar(null, null, 1, pattern);
    }

    /**
     * 下个月
     * 返回数据数据类型为Date
     *
     * @return 格式化后的下个月
     */
    public static Date nextMonthToDate() {
        return monthToDateCalendar(null, null, 1, null);
    }

    /**
     * 下个月
     * 返回数据数据类型为Date
     *
     * @param pattern 指定格式化格式
     * @return 格式化后的下一月
     */
    public static Date nextMonthToDate(String pattern) {
        return monthToDateCalendar(null, null, 1, pattern);
    }

    /*=====================================================   天   =====================================================*/

    /**
     * 日期往前/后推多少天
     * 返回数据数据类型为String
     *
     * @param len 要推的天数 例:往前推一天 -1
     * @return 格式化后的日期
     */
    public static String dayMove(Integer len) {
        return dayToStrCalendar(null, null, len, null);
    }

    /**
     * 日期往前/后推多少天
     * 返回数据数据类型为String
     *
     * @param date    指定日期
     * @param len     要推的天数 例:往前推一天 -1
     * @param pattern 格式化格式
     * @return 格式化后的日期
     */
    public static String dayMove(String date, Integer len, String pattern) {
        return dayToStrCalendar(null, date, len, pattern);
    }

    /**
     * 日期往前/后推多少天
     * 返回数据数据类型为String
     *
     * @param date 指定日期
     * @param len  要推的天数 例:往前推一天 -1
     * @return 格式化后的日期
     */
    public static String dayMove(Date date, Integer len) {
        return dayToStrCalendar(date, null, len, null);
    }

    /**
     * 日期往前/后推多少天
     * 返回数据数据类型为String
     *
     * @param date    指定日期
     * @param len     要推的天数 例:往前推一天 -1
     * @param pattern 格式化格式
     * @return 格式化后的日期
     */
    public static String dayMove(Date date, Integer len, String pattern) {
        return dayToStrCalendar(date, null, len, pattern);
    }

    /**
     * 日期往前/后推多少天
     * 返回数据数据类型为Date
     *
     * @param len 要推的天数 例:往前推一天 -1
     * @return 格式化后的日期
     */
    public static Date dayMoveToDate(Integer len) {
        return dayToDateCalendar(null, null, len, null);
    }

    /**
     * 日期往前/后推多少天
     * 返回数据数据类型为Date
     *
     * @param date    指定日期
     * @param len     要推的天数 例:往前推一天 -1
     * @param pattern 格式化格式
     * @return 格式化后的日期
     */
    public static Date dayMoveToDate(String date, Integer len, String pattern) {
        return dayToDateCalendar(null, date, len, pattern);
    }

    /**
     * 日期往前/后推多少天
     * 返回数据数据类型为Date
     *
     * @param date 指定日期
     * @param len  要推的天数 例:往前推一天 -1
     * @return 格式化后的日期
     */
    public static Date dayMoveToDate(Date date, Integer len) {
        return dayToDateCalendar(date, null, len, null);
    }

    /**
     * 日期往前/后推多少天
     * 返回数据数据类型为Date
     *
     * @param date    指定日期
     * @param len     要推的天数 例:往前推一天 -1
     * @param pattern 格式化格式
     * @return 格式化后的日期
     */
    public static Date dayMoveToDate(Date date, Integer len, String pattern) {
        return dayToDateCalendar(date, null, len, pattern);
    }

    /**
     * 明天
     * 返回数据数据类型为String
     *
     * @return 明天日期
     */
    public static String tomorrow() {
        return dayToStrCalendar(null, null, 1, null);
    }

    /**
     * 明天
     * 返回数据数据类型为String
     *
     * @param pattern 格式化格式
     * @return 明天日期
     */
    public static String tomorrow(String pattern) {
        return dayToStrCalendar(null, null, 1, pattern);
    }

    /**
     * 明天
     * 返回数据数据类型为Date
     *
     * @return 明天日期
     */
    public static Date tomorrowToDate() {
        return dayToDateCalendar(null, null, 1, null);
    }

    /**
     * 明天
     * 返回数据数据类型为Date
     *
     * @param pattern 格式化格式
     * @return 明天日期
     */
    public static Date tomorrowToDate(String pattern) {
        return dayToDateCalendar(null, null, 1, pattern);
    }

    /**
     * 昨天
     * 返回数据数据类型为String
     *
     * @return 昨天日期
     */
    public static String yesterday() {
        return dayToStrCalendar(null, null, -1, null);
    }

    /**
     * 昨天
     * 返回数据数据类型为String
     *
     * @param pattern 格式化格式
     * @return 昨天日期
     */
    public static String yesterday(String pattern) {
        return dayToStrCalendar(null, null, -1, pattern);
    }

    /**
     * 昨天
     * 返回数据数据类型为Date
     *
     * @return 昨天日期
     */
    public static Date yesterdayToDate() {
        return dayToDateCalendar(null, null, -1, null);
    }

    /**
     * 昨天
     * 返回数据数据类型为Date
     *
     * @param pattern 格式化格式
     * @return 昨天日期
     */
    public static Date yesterdayToDate(String pattern) {
        return dayToDateCalendar(null, null, -1, pattern);
    }

    /*=====================================================   其它   =====================================================*/

    /**
     * 判断当前日期是否在指定日期段内
     * 此方法可以用来判断两种格式的日期
     * 例1:开始时间:2022-01-20 结束时间:2022-01-19
     * 例2:开始时间:10 结束时间:1
     *
     * @param begin  开始日期
     * @param end    结束日期
     * @param isThis 是否是本月
     * @return true在 false不在
     */
    public static Boolean isInSection(String begin, String end, Boolean isThis) {
        return nowIsInSection(begin, end, isThis);
    }

    /**
     * 判断当前时间是否在时间段内
     *
     * @param beginTimeStr 起始时间,格式应与format匹配
     * @param endTimeStr   结束时间,格式应与format匹配
     * @param format       时间格式,如HH:mm:ss
     * @return boolean
     * @since 1.1.0
     */
    public static boolean isInTime(String beginTimeStr, String endTimeStr, String format) {
        return nowIsInTime(beginTimeStr, endTimeStr, format);
    }

    /**
     * 日期格式转换为字符串
     *
     * @param date    日期
     * @param pattern 转换格式:如:yyyy-MM-dd HH:mm:ss
     * @return 转换后的字符串
     */
    public static String parseToStr(Date date, String pattern) {
        SimpleDateFormat sdf = new SimpleDateFormat(null == pattern ? PATTERN : pattern);
        return sdf.format(date);
    }

    /**
     * 日期字符串格式化
     * 注意:该方法未进行校验,仅暴力返回数据,请在传入前保证日期字符串的正确性
     *
     * @param str 日期
     * @return 转换后的字符串
     */
    public static String parseToStr(String str) {
        int length = str.length();
        if (4 > length) {
            throw new RuntimeException("时间字符串格式错误=====>" + str);
        } else if (6 > length) {
            return str.substring(0, 4);
        } else if (8 > length) {
            return str.substring(0, 4) + "-" + str.substring(4, 6);
        } else if (10 > length) {
            return str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8);
        } else if (12 > length) {
            return str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " +
                    str.substring(8, 10);
        } else if (14 > length) {
            return str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " +
                    str.substring(8, 10) + ":" + str.substring(10, 12);
        } else {
            return str.substring(0, 4) + "-" + str.substring(4, 6) + "-" + str.substring(6, 8) + " " +
                    str.substring(8, 10) + ":" + str.substring(10, 12) + ":" + str.substring(12, 14);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy