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

com.github.hugh.util.DateUtils Maven / Gradle / Ivy

The newest version!
package com.github.hugh.util;

import com.github.hugh.constant.DateCode;
import com.github.hugh.exception.ToolboxException;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.regex.Pattern;

/**
 * Date 类型日期使用常用工具类
 * 

该类型主要使用java 1.8之前没有LocalDateTime 类的处理方式

* * @author hugh * @version java 1.7 * @since 1.0.0 */ public class DateUtils extends DateCode { private DateUtils() { } /** * 格式化完整的日期字符串 * * @param date 日期对象 * @return String yyyy-MM-dd HH:mm:ss * @since 2.0.1 */ public static String ofPattern(Date date) { return format(date, YEAR_MONTH_DAY_HOUR_MIN_SEC); } /** * 格式化日期 * * @param date 日期对象 * @return String 格式为:yyyy-MM-dd */ public static String format(Date date) { return format(date, YEAR_MONTH_DAY); } /** * 格式化日期 * * @param date 日期对象 * @param pattern 格式 * @return String 日期格式字符串 */ public static String format(Date date, String pattern) { if (date == null) { return null; } if (pattern == null) { return format(date); } return new SimpleDateFormat(pattern).format(date); } /** * 获取日期{@code yyyy-MM-dd} * * @return String 当前时间 */ public static String getDate() { return format(new Date()); } /** * 获取年月日 * * @return String yyyyMMdd */ public static String getDateSign() { return format(new Date(), YEAR_MONTH_DAY_SIMPLE); } /** * 根据格式获取当前日期 * * @param format 日期格式 * @return String */ public static String getDate(String format) { var simpleDateFormat = new SimpleDateFormat(format); return simpleDateFormat.format(new Date()); } /** * 获取当前时间前后N天的起始日期 * * @param day 指定天输(正数 or 负数) * @return Date 日期对象 */ public static Date getDate(int day) { var calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.add(Calendar.DAY_OF_MONTH, day); set(calendar, 0, 0, 0, 0); return calendar.getTime(); } /** * 将字符串yyyy-MM-dd HH:mm:ss转换为yyyyMMddHHmmss 如果传入的字符串为null,则返回空值 * * @param dateTime 日期格式的字符串 * @return String 日期格式字符串 */ public static String toStringTime(String dateTime) { if (dateTime == null) { return ""; } return dateTime.replace("-", "").replace(" ", "").replace(":", ""); } /** * 将字符串yyyyMMddhhmmss 转换成yyyy-MM-dd HH:mm:ss字符串格式 如果传入的字符串为null,则返回空值 * * @param strDate 字符串yyyyMMddhhmmss * @return String 日期格式字符串 */ public static String toStringDate(String strDate) { if (strDate == null) { return ""; } var reg = "(\\d{4})(\\d{2})(\\d{2})(\\d{2})(\\d{2})(\\d{2})"; return strDate.replaceAll(reg, "$1-$2-$3 $4:$5:$6"); } /** * 转换日期 * * @param value 字符串日期 or 日期对象 * @return Date 默认日期对象格式:yyyy-MM-dd HH:mm:ss */ public static Date parse(T value) { return parse(value, YEAR_MONTH_DAY_HOUR_MIN_SEC); } /** * 根据不同日期格式,转换成对应的日期格式对象 * * @param value 日期 * @param format 日期格式 * @return Date */ public static Date parse(T value, String format) { if (value instanceof Date) { return (Date) value; } else { return parseDate(String.valueOf(value), format); } } /** * 将字符串(yyyy-MM-dd)解析成日期 * * @param dateStr 日期格式的字符串 * @return Date 日期类型对象 */ public static Date parseDate(String dateStr) { return parseDate(dateStr, YEAR_MONTH_DAY); } /** * 按照指定的格式,将字符串解析成日期类型对象,例如:yyyy-MM-dd,yyyy/MM/dd,yyyy/MM/dd hh:mm:ss * * @param dateStr 日期格式的字符串 * @param format 字符串的格式 * @return Date 日期类型对象 */ public static Date parseDate(String dateStr, String format) { if (EmptyUtils.isEmpty(dateStr)) { return null; } var simpleDateFormat = new SimpleDateFormat(format); try { return simpleDateFormat.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); return null; } } /** * 将时间戳转换成日期格式的字符串 * * @param timestamp 时间戳 * @return String yyyy-MM-dd HH:mm:ss 日期字符串 * @since 1.3.10 */ public static String formatTimestamp(long timestamp) { return formatTimestamp(timestamp, YEAR_MONTH_DAY_HOUR_MIN_SEC); } /** * 将时间戳转换成日期格式的字符串 * * @param timestamp 时间戳 * @param format 日期格式 * @return String 字符串 * @since 1.3.12 */ public static String formatTimestamp(long timestamp, String format) { if (timestamp < 0) { return null; } return new SimpleDateFormat(format).format(timestamp); } /** * 将时间戳转换为Date类型 *

调用{@link #formatTimestamp(long)}格式化时间戳,后将调用{@link #parse(Object)}解析成{@link Date}

* * @param timestamp 时间戳 * @return Date * @since 1.3.10 */ public static Date parseTimestamp(long timestamp) { if (timestamp < 0) { return null; } String strTime = formatTimestamp(timestamp); return parse(strTime); } /** * 判断日期是否是本日,本周,本月 * * @param time 需要判断的时间 * @param pattern 日期格式 * @return boolean */ public static boolean isThisTime(long time, String pattern) { var date = new Date(time); var simpleDateFormat = new SimpleDateFormat(pattern); String param = simpleDateFormat.format(date);// 参数时间 String now = simpleDateFormat.format(new Date());// 当前时间 return param.equals(now); } /** * 根据当前时间的一天前的起始时间 * * @return Date 前一天的起始时间 */ public static Date getDayBeforeStartTime() { var date = new Date(); String dateStr = format(date, YEAR_MONTH_DAY); return getDayBeforeStartTime(dateStr); } /** * 根据日期字符串获取前一天的起始时间 * * @param dateStr 日期字符串-格式:yyyy-MM-dd * @return Date 前一天的起始时间 */ public static Date getDayBeforeStartTime(String dateStr) { var calendar = Calendar.getInstance(); var date = parseDate(dateStr, YEAR_MONTH_DAY); if (date == null) { return null; } calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, -1); calendar.set(Calendar.HOUR, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar.getTime(); } /** * 根据当前时间获取一天前的结束时间 * * @return Date 前一天的结束时间 */ public static Date getDayBeforeEndTime() { var date = new Date(); String dateStr = format(date, YEAR_MONTH_DAY); return getDayBeforeEndTime(dateStr); } /** * 根据日期字符串获取前一天的结束时间 * * @param dateStr 日期字符串-格式:yyyy-MM-dd * @return Date 前一天的结束时间 */ public static Date getDayBeforeEndTime(String dateStr) { var calendar = Calendar.getInstance(); var date = parseDate(dateStr, YEAR_MONTH_DAY); if (date == null) { return null; } calendar.setTime(date); calendar.add(Calendar.DAY_OF_MONTH, -1); calendar.set(Calendar.HOUR, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MILLISECOND, 999); return calendar.getTime(); } /** * 判断两个日期是否为同一月 * * @param beginDate 开始日期 * @param endDate 结束日期 * @return boolean @{code true} 同一月 */ public static boolean isSameMonth(Date beginDate, Date endDate) { try { Calendar cal1 = Calendar.getInstance(); cal1.setTime(beginDate); int month1 = cal1.get(Calendar.MONTH) + 1; Calendar cal2 = Calendar.getInstance(); cal2.setTime(endDate); int month2 = cal2.get(Calendar.MONTH) + 1; boolean isSameYear = cal1.get(Calendar.YEAR) == cal2.get(Calendar.YEAR); return isSameYear && month1 == month2; } catch (Exception e) { e.printStackTrace(); } return false; } /** * 设置日期的月份开始时间 * * @param date 日期对象 * @return String */ public static String setMonthFirstDay(Date date) { // 获取前月的第一天 Calendar calendar = Calendar.getInstance();// 获取当前日期 if (date != null) { calendar.setTime(date); } else { calendar.setTime(new Date()); } calendar.add(Calendar.MONTH, 0); calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为1号,当前日期既为本月第一天 return format(calendar.getTime(), YEAR_MONTH_DAY_HOUR_MIN_SEC); } /** * 设置月份的最后一天时间 * * @param date 日期对象 * @return String {@code yyyy-MM-dd 23:59:59} */ public static String setMonthLastDay(Date date) { Calendar calendar = Calendar.getInstance(); if (date != null) { calendar.setTime(date); } else { calendar.setTime(new Date()); } calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MILLISECOND, 999); return format(calendar.getTime(), YEAR_MONTH_DAY_HOUR_MIN_SEC); } /** * 获取上一个月的月初开始时间 * * @return Date */ public static Date getMonthBeforeStartTime() { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, -1); calendar.set(Calendar.DAY_OF_MONTH, 1); 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(); } /** * 获取上一个月最后一天的结束时间 * * @return Date */ public static Date getMonthBeforeEndTime() { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, -1); // 获取最后一天 calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); set(calendar, 23, 59, 59, 999); return calendar.getTime(); } /** * 获取某一天开始时间,不传日期则获取今日 * * @param dateStr 字符串日期格式 yyyy-MM-dd * @return Date */ public static Date getStartTime(String dateStr) { Date date; if (EmptyUtils.isEmpty(dateStr)) { date = new Date(); } else { date = parseDate(dateStr, YEAR_MONTH_DAY); } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); set(calendar, 0, 0, 0, 0); return calendar.getTime(); } /** * 获取今天起始时间 * * @return Date 今天起始时间 */ public static Date getTodayStartTime() { return getStartTime(null); } /** * 获取某一天结束时间,不传日期则获取今日 * * @param dateStr 字符串日期格式 yyyy-MM-dd * @return Date */ public static Date getEndTime(String dateStr) { Date date; if (EmptyUtils.isEmpty(dateStr)) { date = new Date(); } else { date = parseDate(dateStr, YEAR_MONTH_DAY); } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); set(calendar, 23, 59, 59, 999); return calendar.getTime(); } /** * 获取今天结束时间 * * @return Date 结束时间 */ public static Date getTodayEndTime() { return getEndTime(null); } /** * 获取当前一小时前的时间 * * @return Date */ public static Date getHourAgo() { return getHourAgo(null); } /** * 获取一小时前的时间日期,null时默认当前时间的一小时前 * * @param date 日期对象 * @return Date */ public static Date getHourAgo(Date date) { Calendar calendar = Calendar.getInstance(); if (date == null) { calendar.setTime(new Date()); } else { calendar.setTime(date); } // 小时-1 calendar.set(Calendar.HOUR, calendar.get(Calendar.HOUR) - 1); return calendar.getTime(); } /** * 获取一个月之前的当前时间 * * @return Date */ public static Date getOneMonthAgo() { Calendar c = Calendar.getInstance(); c.setTime(new Date()); c.add(Calendar.MONTH, -1); return c.getTime(); } /** * 获取当前时间的一周前时间 * * @return Date 一周前时间 */ public static Date getWeekAgo() { return getWeekAgo(null); } /** * 获取指定日期的一周前时间 * * @param date 指定日期 * @return Date 日期 */ public static Date getWeekAgo(Date date) { Calendar calendar = Calendar.getInstance(); if (date == null) { calendar.setTime(new Date()); } else { calendar.setTime(date); } // 过去七天 calendar.add(Calendar.DATE, -7); return calendar.getTime(); } /** * 将字符串的日期转换成日期类型,并且时分秒设定为一天的起始 * * @param dateStr yyyy-mm-dd 日期格式的字符串 * @return Date 一天的起始日期 */ public static Date setStartHouMinSec(String dateStr) { Date date = parseDate(dateStr, YEAR_MONTH_DAY); if (date == null) { throw new ToolboxException("data is null"); } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } /** * 将字符串的日期转换成日期类型,并且时分秒设定为一天的结束时间 * * @param dateStr yyyy-mm-dd 日期格式的字符串 * @return Date 一天的结束时间 */ public static Date setEndHouMinSec(String dateStr) { Date date = parseDate(dateStr, YEAR_MONTH_DAY); if (date == null) { throw new ToolboxException("data is null"); } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); return calendar.getTime(); } /** * 获取日期中的年份 * * @param date 日期对象 * @return int 年份(1-12) */ public static int getYear(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.YEAR); } /** * 获取年份 * * @return the year, from MIN_YEAR to MAX_YEAR * @since 1.5.0 */ public static int getYear() { return LocalDateTime.now().getYear(); } /** * 获取日期中的月份 * * @param date 日期对象 * @return int 月份(1-12) */ public static int getMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MONTH) + 1; } /** * 获取月数 * * @return the month-of-year, from 1 to 12 * @since 1.5.0 */ public static int getMonth() { return LocalDateTime.now().getMonthValue(); } /** * 获取日期中的日 * * @param date 日期对象 * @return int 日(1-31) */ public static int getDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.DATE); } /** * 获取日 * * @return the day-of-month, from 1 to 31 * @since 1.5.0 */ public static int getDay() { return LocalDateTime.now().getDayOfMonth(); } /** * 将字符串的 yyyyMMdd、截取成yyyyMM * * @param strDate yyyyMMdd的字符串 * @return String yyyyMM */ public static String substring(String strDate) { if (EmptyUtils.isEmpty(strDate)) { return null; } return strDate.substring(0, 6); } /** * 判断当前日期是否是月初的第一天 * * @return boolean 是月初返回true,其他返回false */ public static boolean isEarlyMonth() { return isEarlyMonth(new Date()); } /** * 判断是否是月初的第一天 * * @param date 日期 * @return boolean 是月初返回true,其他返回false */ public static boolean isEarlyMonth(Date date) { if (date == null) { return false; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.DAY_OF_MONTH) == 1; } /** * 校验当前日期是否与传递日期一致 * * @param date 需校验的日期 * @param format 日期格式如:yyyy-MM-dd HH:mm:ss * @return boolean 一致返回true、其他返回false */ public static boolean isNowadays(Date date, String format) { if (date == null) { return false; } Date nowDate = new Date(); String tem = format(nowDate, format); String tem1 = format(date, format); return tem.equals(tem1); } /** * 校验日期是否超过日期的多少个小时 * * @param date 日期 * @param hour 小时 * @return boolean 超过true、其它false */ public static boolean checkTimeOut(Date date, int hour) { if (date == null || hour <= 0) { return true; } long mill = 3600000; // 当小时大于一小时的时候,根据需求乘以对应的小时毫秒 if (hour > 1) { mill = hour * mill; } Date nowDate = new Date(); long time = nowDate.getTime(); return (time - date.getTime()) > mill; } /** * 获取日期当天的起始日期 * * @param date 日期 * @return Date */ public static Date getStartDate(Date date) { if (date == null) { return null; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); set(calendar, 0, 0, 0, 0); return calendar.getTime(); } /** * 获取日期结束时间 * * @param date 日期对象 * @return Date 日期的23:59:59 */ public static Date getEndDate(Date date) { if (date == null) { return null; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); set(calendar, 23, 59, 59, 999); return calendar.getTime(); } /** * 校验日期是否超过当前系统日期 * * @param date 日期对象 * @return boolean {@code true} 超过当前系统时间 */ public static boolean exceedSystem(Date date) { if (date == null) { return true; } // 当前系统日期 Date current = new Date(); return date.getTime() > current.getTime(); } /** * 校验日期对象是否小于当前系统时间 * * @param date 日期对象 * @return boolean {@code true} 小于当前系统时间 */ public static boolean belowSystem(Date date) { if (date == null) { return true; // 空直接返回true } Date current = new Date(); return date.getTime() < current.getTime(); } /** * 获取当前月份起始日期时间 * * @return Date 月初时间 */ public static Date getMonthStartTime() { return getMonthStartTime(new Date()); } /** * 获取日期月份开始时间 * * @param date 日期对象 * @return Date */ public static Date getMonthStartTime(Date date) { if (date == null) { return null; } int month = getMonth(date); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.MONTH, month - 1); calendar.set(Calendar.DAY_OF_MONTH, 1); set(calendar, 0, 0, 0, 0); return calendar.getTime(); } /** * 获取日期中月底时间 * * @param date 日期对象 * @return Date 日期对象{@code 2019-09-30 23:59:59} */ public static Date getMonthEndTime(Date date) { if (date == null) { return null; } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int month = getMonth(date); calendar.set(Calendar.MONTH, month - 1); // 获取最后一天 calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); set(calendar, 23, 59, 59, 999); return calendar.getTime(); } /** * 校验日期是否是今天 * * @param date 日期对象 * @return boolean {@code true}今天 */ public static boolean isToday(Date date) { if (date == null) { return false; } String time = format(date, YEAR_MONTH_DAY_HOUR_MIN_SEC); return isToday(time, YEAR_MONTH_DAY_HOUR_MIN_SEC); } /** * 校验日期是否是今天 *

默认格式:yyyy-MM-dd HH:mm:ss

* * @param time 日期字符串 * @return boolean */ public static boolean isToday(String time) { return isToday(time, YEAR_MONTH_DAY_HOUR_MIN_SEC); } /** * 校验字符串日期是否为今天 * * @param time 字符串日期 * @param formatStr 格式 * @return Boolean {@code true}今天 */ public static boolean isToday(String time, String formatStr) { var date = parseDate(time, formatStr); if (date == null) { return false; } // 设置传入的时间 var calendar = Calendar.getInstance(); calendar.setTime(date); int year1 = calendar.get(Calendar.YEAR); int month1 = calendar.get(Calendar.MONTH) + 1; int day1 = calendar.get(Calendar.DAY_OF_MONTH); Calendar c2 = Calendar.getInstance(); // 设置当前时间 c2.setTime(new Date()); int year2 = c2.get(Calendar.YEAR); int month2 = c2.get(Calendar.MONTH) + 1; int day2 = c2.get(Calendar.DAY_OF_MONTH); // 校验年份、月份、天是否都是同一数值 return year1 == year2 && month1 == month2 && day1 == day2; } /** * 校验日期是否与格式一致 * * @param time 日期 * @param format 格式 * @return boolean 正确返回true、其他返回false */ public static boolean isValidDate(String time, String format) { if (com.github.hugh.util.EmptyUtils.isEmpty(time) || com.github.hugh.util.EmptyUtils.isEmpty(format)) { return false; } try { // 转换为日期 Date date = parseDate(time, format); // 再将日期转换成对应格式,进行校验是否与字符串一致 return time.equals(format(date, format)); } catch (Exception e) { return false; } } /** * 获取小时整点时间 * * @return Date 日期对象 {@code 2019-07-25 14:00:00} */ public static Date getIniHour() { Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); return calendar.getTime(); } /** * 获取当前小时的结束时间点 * * @return Date 日期对象 {@code 2019-07-25 09:59:59} */ public static Date getEndHour() { Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MILLISECOND, 999); return calendar.getTime(); } /** * 结束日期小于起始日期 * * @param start 起始日期 * @param end 结束日期 * @return boolean {@code true} 结束日期小于起始日期 */ public static boolean lessThanStartDate(Date start, Date end) { if (start == null) { throw new ToolboxException(" start date is null ! "); } if (end == null) { throw new ToolboxException(" end date is null ! "); } return end.getTime() < start.getTime(); } /** * 结束日期大于起始日期 * * @param start 起始日期 * @param end 结束日期 * @return boolean {@code true} 结束日期小于起始日期 * @since 1.4.14 */ public static boolean greaterThanStartDate(Date start, Date end) { if (start == null) { throw new ToolboxException(" start date is null ! "); } if (end == null) { throw new ToolboxException(" end date is null ! "); } return end.getTime() > start.getTime(); } /** * 判断是否是日期的格式 *

默认校验格式:yyyy-MM-dd HH:mm:ss

* * @param timeStr 日期格式字符串 * @return boolean */ public static boolean isDateFormat(String timeStr) { return isDateFormat(timeStr, YEAR_MONTH_DAY_HOUR_MIN_SEC); } /** * 校验字符串是不是日期的格式 *

支持格式:yy-MM、yy-MM-dd、yyyy-MM-dd HH:mm:ss

* * @param timeStr 日期字符串 * @param pattern 日期格式 * @return boolean {@code true} 字符串格式正确 */ public static boolean isDateFormat(String timeStr, String pattern) { if (EmptyUtils.isEmpty(timeStr)) { return false; } try { String regex; if (YEAR_MONTH.equals(pattern)) {//年-月 regex = "\\d{4}-\\d{2}"; } else if (YEAR_MONTH_DAY.equals(pattern)) {//年-月-日 regex = "\\d{4}-\\d{2}-\\d{2}"; } else {// 默认校验yyyy-MM-dd HH:mm:ss regex = "\\d{4}-\\d{2}-\\d{2}\\s{1}\\d{2}:\\d{2}:\\d{2}"; } var patternObj = Pattern.compile(regex);// 编译正则表达式 var matcher = patternObj.matcher(timeStr);// 忽略大小写的写法 if (matcher.matches()) {// 先验证格式 var date = parseDate(timeStr, pattern);//转换格式 return timeStr.equals(format(date, pattern));// 验证时间 } } catch (Exception e) { e.printStackTrace(); } return false; } /** * 设置Calendar的小时、分钟、秒、毫秒 * * @param calendar 日历 * @param hour 小时 * @param minute 分 * @param second 秒 * @param milliSecond 毫秒 */ public static void set(Calendar calendar, int hour, int minute, int second, int milliSecond) { calendar.set(Calendar.HOUR_OF_DAY, hour); calendar.set(Calendar.MINUTE, minute); calendar.set(Calendar.SECOND, second); calendar.set(Calendar.MILLISECOND, milliSecond); } /** * 验证字符串时间,是否在30天内 * * @param date 日期 * @return boolean 30天内返回ture、其他返回false */ public static boolean isValidDate(Date date) { return isValidDate(date, 30); } /** * 校验日期对象是否在某个范围天之内 * * @param date 日期对象 * @param day 天数 * @return boolean 在范围内返回true、其他返回false */ public static boolean isValidDate(Date date, int day) { if (date == null) { return false; } SimpleDateFormat format = new SimpleDateFormat(YEAR_MONTH_DAY_HOUR_MIN_SEC);// 时间格式定义 String nowDate = format.format(new Date());// 获取当前时间日期--nowDate Calendar calendar = Calendar.getInstance();// 获取30天前的时间日期--minDate calendar.add(Calendar.DAY_OF_MONTH, -day); String minDate = format.format(calendar.getTime()); try { // 设置lenient为false. 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01 format.setLenient(false); // 获取字符串转换后的时间--strDate String strDate = format.format(date); return nowDate.compareTo(strDate) >= 0 && strDate.compareTo(minDate) >= 0; } catch (Exception e) { e.printStackTrace(); } return false; } /** * 校验开始日期与结束日期是否属于同一年份 * * @param startStr 起始日期字符串 支持格式:yyyy-MM-dd | yyyy-MM-dd HH:mm:ss * @param endStr 结束日期字符串 支持格式:yyyy-MM-dd | yyyy-MM-dd HH:mm:ss * @return boolean 不是同一年返回true */ public static boolean isAcrossYear(String startStr, String endStr) { Date start; if (isDateFormat(startStr)) { start = parseDate(startStr, YEAR_MONTH_DAY_HOUR_MIN_SEC); } else if (isDateFormat(startStr, YEAR_MONTH_DAY)) { start = parseDate(startStr); } else { return true; } Date end; if (isDateFormat(endStr)) { end = parseDate(endStr, YEAR_MONTH_DAY_HOUR_MIN_SEC); } else if (isDateFormat(endStr, YEAR_MONTH_DAY)) { end = parseDate(endStr); } else { return true; } return isAcrossYear(start, end); } /** * 校验开始日期与结束日期是否属于同一年份 * * @param start 起始日期 * @param end 结束日期 * @return boolean 不是同一年返回true */ private static boolean isAcrossYear(Date start, Date end) { if (start == null) { return true;// 空值直接返回 } int year = getYear(start); if (end == null) { // 结束日期为空时,使用当前日期 end = new Date(); } return year != getYear(end); } /** * 根据当前时间获取距离凌晨还剩余多少毫秒 * * @return long 距离凌晨毫秒数 */ public static long getEarlyMorningSec() { long now = System.currentTimeMillis();// 当前毫秒数 SimpleDateFormat sdfOne = new SimpleDateFormat(YEAR_MONTH_DAY); long overTime; try { overTime = (now - (sdfOne.parse(sdfOne.format(now)).getTime())) / 1000; } catch (ParseException e) { e.printStackTrace(); return -1; } // 当前时间 距离当天晚上23:59:59 秒数 也就是今天还剩多少秒 return 24 * 60 * 60 - overTime; } /** * 日期对象的字符串 转 日期对象 * * @param dataStr 日期对象字符串 @{code Fri Oct 09 00:00:00 CST 2020} * @return Date * @since 1.2.8 */ public static Date dateStrToDate(String dataStr) { try { return new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.US).parse(dataStr); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 计算两个时间之间相差多少分钟 * * @param begin 开始时间 * @param end 结束日期 * @return long 相差分钟 * @since 1.6.1 */ public static long minutesDifference(Date begin, Date end) { if (begin == null) { throw new ToolboxException(" start date is null ! "); } if (end == null) { throw new ToolboxException(" end date is null ! "); } long between = (end.getTime() - begin.getTime()) / 1000; return between / 60; } /** * 获取指定N分钟后的日期 * * @param date 日期对象 * @param min 分钟 * @return Date * @since 1.6.2 */ public static Date getMin(Date date, int min) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MINUTE, +min); return calendar.getTime(); } /** * 计算开始与结束时间相差秒数 * * @param begin 开始日期 * @param end 结束日期 * @return int 相差秒数 * @since 1.7.0 */ public static int secondsDifference(Date begin, Date end) { long a = end.getTime(); long b = begin.getTime(); return (int) ((a - b) / 1000); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy