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);
}
}
}