| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811 |
- package jnpf.util;
- import cn.hutool.core.date.DateTime;
- import cn.hutool.core.util.ObjectUtil;
- import com.alibaba.fastjson.JSONArray;
- import jnpf.exception.DataException;
- import org.quartz.CronExpression;
- import org.quartz.TriggerUtils;
- import org.quartz.impl.triggers.CronTriggerImpl;
- import java.sql.Timestamp;
- import java.text.ParseException;
- import java.text.ParsePosition;
- import java.text.SimpleDateFormat;
- import java.time.*;
- import java.time.format.DateTimeFormatter;
- import java.util.*;
- /**
- * @author JNPF开发平台组
- * @version V3.1.0
- * @copyright 引迈信息技术有限公司
- * @date 2021/3/16 10:47
- */
- public class DateUtil {
- //============================借助Calendar类获取今天、昨天、本周、上周、本年及特定时间的开始时间和结束时间(返回类型为date类型)========================
- /**
- * 获取当天开始时间
- *
- * @return
- */
- public static Date getDayBegin() {
- Calendar cal = Calendar.getInstance();
- //0点
- cal.set(Calendar.HOUR_OF_DAY, 0);
- //0分
- cal.set(Calendar.MINUTE, 0);
- //0秒
- cal.set(Calendar.SECOND, 0);
- //0毫秒
- cal.set(Calendar.MILLISECOND, 0);
- return cal.getTime();
- }
- /**
- * 获取当前时间
- */
- public static String getNow() {
- LocalDateTime ldt1 = LocalDateTime.now();
- DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss" );
- String temp = dtf1.format(ldt1);
- return temp;
- }
- /**
- * 获取当前时间
- */
- public static String getNow(String zone) {
- LocalDateTime ldt1 = LocalDateTime.now(ZoneId.of(zone));
- DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss" );
- String temp = dtf1.format(ldt1);
- return temp;
- }
- /**
- * 获取当前时间
- */
- public static String getmmNow() {
- LocalDateTime ldt1 = LocalDateTime.now();
- DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm" );
- String temp = dtf1.format(ldt1);
- return temp;
- }
- /**
- * 获取当前时间字符串
- * yyyyMMddHHmmss
- */
- public static String nowDateTime(){
- LocalDateTime ldt1 = LocalDateTime.now();
- DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyyMMddHHmmss" );
- String temp = dtf1.format(ldt1);
- return temp;
- }
- /**
- * 获取当前时间
- */
- public static Date getNowDate() {
- Date date = new Date();
- return date;
- }
- /**
- * 获取当天结束时间
- *
- * @return
- */
- public static Date getDayEnd() {
- Calendar cal = Calendar.getInstance();
- //23点
- cal.set(Calendar.HOUR_OF_DAY, 23);
- //59分
- cal.set(Calendar.MINUTE, 59);
- //59秒
- cal.set(Calendar.SECOND, 59);
- return cal.getTime();
- }
- /**
- * 获取昨天开始时间
- *
- * @return
- */
- public static Date getBeginDayOfYesterday() {
- Calendar cal = Calendar.getInstance();
- //当天开始时间
- cal.setTime(getDayBegin());
- //当天月份天数减1
- cal.add(Calendar.DAY_OF_MONTH, -1);
- return cal.getTime();
- }
- /**
- * 获取昨天结束时间
- *
- * @return
- */
- public static Date getEndDayOfYesterday() {
- Calendar cal = Calendar.getInstance();
- //当天结束时间
- cal.setTime(getDayEnd());
- //当天月份天数减1
- cal.add(Calendar.DAY_OF_MONTH, -1);
- return cal.getTime();
- }
- /**
- * 获取明天开始时间
- *
- * @return
- */
- public static Date getBeginDayOfTomorrow() {
- Calendar cal = Calendar.getInstance();
- //当天开始时间
- cal.setTime(getDayBegin());
- //当天月份天数加1
- cal.add(Calendar.DAY_OF_MONTH, 1);
- return cal.getTime();
- }
- /**
- * 获取明天结束时间
- *
- * @return
- */
- public static Date getEndDayOfTomorrow() {
- Calendar cal = Calendar.getInstance();
- //当天结束时间
- cal.setTime(getDayEnd());
- //当天月份天数加1
- cal.add(Calendar.DAY_OF_MONTH, 1);
- return cal.getTime();
- }
- /**
- * 获取某个日期的开始时间
- *
- * @param d
- * @return
- */
- public static Timestamp getDayStartTime(Date d) {
- Calendar calendar = Calendar.getInstance();
- if (null != d) {
- calendar.setTime(d);
- }
- calendar.set(calendar.get(Calendar.YEAR),
- calendar.get(Calendar.MONTH),
- calendar.get(Calendar.DAY_OF_MONTH), 0, 0, 0);
- calendar.set(Calendar.MILLISECOND, 0);
- return new Timestamp(calendar.getTimeInMillis());
- }
- /**
- * 获取某个日期的结束时间
- *
- * @param d
- * @return
- */
- public static Timestamp getDayEndTime(Date d) {
- Calendar calendar = Calendar.getInstance();
- if (null != d) {
- calendar.setTime(d);
- }
- calendar.set(calendar.get(Calendar.YEAR),
- calendar.get(Calendar.MONTH),
- calendar.get(Calendar.DAY_OF_MONTH), 23, 59, 59);
- calendar.set(Calendar.MILLISECOND, 999);
- return new Timestamp(calendar.getTimeInMillis());
- }
- /**
- * 获取本周的开始时间
- *
- * @return
- */
- public static Date getBeginDayOfWeek() {
- Date date = new Date();
- Calendar cal = Calendar.getInstance();
- cal.setTime(date);
- int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
- if (dayOfWeek == 1) {
- dayOfWeek += 7;
- }
- cal.add(Calendar.DATE, 2 - dayOfWeek);
- return getDayStartTime(cal.getTime());
- }
- /**
- * 获取本周的结束时间
- *
- * @return
- */
- public static Date getEndDayOfWeek() {
- Calendar cal = Calendar.getInstance();
- cal.setTime(getBeginDayOfWeek());
- cal.add(Calendar.DAY_OF_WEEK, 6);
- Date weekEndSta = cal.getTime();
- return getDayEndTime(weekEndSta);
- }
- /**
- * 获取上周开始时间
- */
- @SuppressWarnings("unused" )
- public static Date getBeginDayOfLastWeek() {
- Date date = new Date();
- if (date == null) {
- return null;
- }
- Calendar cal = Calendar.getInstance();
- cal.setTime(date);
- int dayofweek = cal.get(Calendar.DAY_OF_WEEK);
- if (dayofweek == 1) {
- dayofweek += 7;
- }
- cal.add(Calendar.DATE, 2 - dayofweek - 7);
- return getDayStartTime(cal.getTime());
- }
- /**
- * 获取上周的结束时间
- *
- * @return
- */
- public static Date getEndDayOfLastWeek() {
- Calendar cal = Calendar.getInstance();
- cal.setTime(getBeginDayOfLastWeek());
- cal.add(Calendar.DAY_OF_WEEK, 6);
- Date weekEndSta = cal.getTime();
- return getDayEndTime(weekEndSta);
- }
- /**
- * 获取今年是哪一年
- *
- * @return
- */
- public static Integer getNowYear() {
- Date date = new Date();
- GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
- gc.setTime(date);
- return Integer.valueOf(gc.get(1));
- }
- /**
- * 获取本月是哪一月
- *
- * @return
- */
- public static int getNowMonth() {
- Date date = new Date();
- GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
- gc.setTime(date);
- return gc.get(2) + 1;
- }
- /**
- * 获取本月的开始时间
- *
- * @return
- */
- public static Date getBeginDayOfMonth() {
- Calendar calendar = Calendar.getInstance();
- calendar.set(getNowYear(), getNowMonth() - 1, 1);
- return getDayStartTime(calendar.getTime());
- }
- /**
- * 获取本月的结束时间
- *
- * @return
- */
- public static Date getEndDayOfMonth() {
- Calendar calendar = Calendar.getInstance();
- calendar.set(getNowYear(), getNowMonth() - 1, 1);
- int day = calendar.getActualMaximum(5);
- calendar.set(getNowYear(), getNowMonth() - 1, day);
- return getDayEndTime(calendar.getTime());
- }
- /**
- * 获取上月的开始时间
- *
- * @return
- */
- public static Date getBeginDayOfLastMonth() {
- Calendar calendar = Calendar.getInstance();
- calendar.set(getNowYear(), getNowMonth() - 2, 1);
- return getDayStartTime(calendar.getTime());
- }
- /**
- * 获取上月的结束时间
- *
- * @return
- */
- public static Date getEndDayOfLastMonth() {
- Calendar calendar = Calendar.getInstance();
- calendar.set(getNowYear(), getNowMonth() - 2, 1);
- int day = calendar.getActualMaximum(5);
- calendar.set(getNowYear(), getNowMonth() - 2, day);
- return getDayEndTime(calendar.getTime());
- }
- /**
- * 获取本年的开始时间
- *
- * @return
- */
- public static Date getBeginDayOfYear() {
- Calendar cal = Calendar.getInstance();
- cal.set(Calendar.YEAR, getNowYear());
- cal.set(Calendar.MONTH, Calendar.JANUARY);
- cal.set(Calendar.DATE, 1);
- return getDayStartTime(cal.getTime());
- }
- /**
- * 获取本年的结束时间
- *
- * @return
- */
- public static Date getEndDayOfYear() {
- Calendar cal = Calendar.getInstance();
- cal.set(Calendar.YEAR, getNowYear());
- cal.set(Calendar.MONTH, Calendar.DECEMBER);
- cal.set(Calendar.DATE, 31);
- return getDayEndTime(cal.getTime());
- }
- /**
- * 两个日期相减得到的天数
- *
- * @param beginDate
- * @param endDate
- * @return
- */
- public static int getDiffDays(Date beginDate, Date endDate) {
- if (beginDate == null || endDate == null) {
- throw new IllegalArgumentException("getDiffDays param is null!" );
- }
- long diff = (endDate.getTime() - beginDate.getTime()) / (1000 * 60 * 60 * 24);
- int days = (int) diff;
- return days;
- }
- /**
- * 两个日期相减得到的毫秒数
- *
- * @param beginDate
- * @param endDate
- * @return
- */
- public static long dateDiff(Date beginDate, Date endDate) {
- long date1ms = beginDate.getTime();
- long date2ms = endDate.getTime();
- return date2ms - date1ms;
- }
- /**
- * 获取两个日期中的最大日起
- *
- * @param beginDate
- * @param endDate
- * @return
- */
- public static Date max(Date beginDate, Date endDate) {
- if (beginDate == null) {
- return endDate;
- }
- if (endDate == null) {
- return beginDate;
- }
- //beginDate日期大于endDate
- if (beginDate.after(endDate)) {
- return beginDate;
- }
- return endDate;
- }
- /**
- * 获取两个日期中的最小日期
- *
- * @param beginDate
- * @param endDate
- * @return
- */
- public static Date min(Date beginDate, Date endDate) {
- if (beginDate == null) {
- return endDate;
- }
- if (endDate == null) {
- return beginDate;
- }
- if (beginDate.after(endDate)) {
- return endDate;
- }
- return beginDate;
- }
- /**
- * 获取某月该季度的第一个月
- *
- * @param date
- * @return
- */
- public static Date getFirstSeasonDate(Date date) {
- final int[] season = {1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4};
- Calendar cal = Calendar.getInstance();
- cal.setTime(date);
- int sean = season[cal.get(Calendar.MONTH)];
- cal.set(Calendar.MONTH, sean * 3 - 3);
- return cal.getTime();
- }
- /**
- * 返回某个日期下几天的日期
- *
- * @param date
- * @param i
- * @return
- */
- public static Date getNextDay(Date date, int i) {
- Calendar cal = new GregorianCalendar();
- cal.setTime(date);
- cal.set(Calendar.DATE, cal.get(Calendar.DATE) + i);
- return cal.getTime();
- }
- /**
- * 返回某个日期前几天的日期
- *
- * @param date
- * @param i
- * @return
- */
- public static Date getFrontDay(Date date, int i) {
- Calendar cal = new GregorianCalendar();
- cal.setTime(date);
- cal.set(Calendar.DATE, cal.get(Calendar.DATE) - i);
- return cal.getTime();
- }
- /**
- * 获取某年某月按天切片日期集合(某个月间隔多少天的日期集合)
- *
- * @param beginYear
- * @param beginMonth
- * @param k
- * @return
- */
- public static List getTimeList(int beginYear, int beginMonth, int k) {
- List list = new ArrayList();
- Calendar begincal = new GregorianCalendar(beginYear, beginMonth, 1);
- int max = begincal.getActualMaximum(Calendar.DATE);
- for (int i = 1; i < max; i = i + k) {
- list.add(begincal.getTime());
- begincal.add(Calendar.DATE, k);
- }
- begincal = new GregorianCalendar(beginYear, beginMonth, max);
- list.add(begincal.getTime());
- return list;
- }
- /**
- * 获取某年某月到某年某月按天的切片日期集合(间隔天数的集合)
- *
- * @param beginYear
- * @param beginMonth
- * @param endYear
- * @param endMonth
- * @param k
- * @return
- */
- public static List getTimeList(int beginYear, int beginMonth, int endYear, int endMonth, int k) {
- List list = new ArrayList();
- if (beginYear == endYear) {
- for (int j = beginMonth; j <= endMonth; j++) {
- list.add(getTimeList(beginYear, j, k));
- }
- } else {
- {
- for (int j = beginMonth; j < 12; j++) {
- list.add(getTimeList(beginYear, j, k));
- }
- for (int i = beginYear + 1; i < endYear; i++) {
- for (int j = 0; j < 12; j++) {
- list.add(getTimeList(i, j, k));
- }
- }
- for (int j = 0; j <= endMonth; j++) {
- list.add(getTimeList(endYear, j, k));
- }
- }
- }
- return list;
- }
- /**
- * 判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
- *
- * @param nowTime 当前时间
- * @param startTime 开始时间
- * @param endTime 结束时间
- * @return
- */
- public static boolean isEffectiveDate(Date nowTime, Date startTime, Date endTime) {
- if (nowTime.getTime() == startTime.getTime()
- || nowTime.getTime() == endTime.getTime()) {
- return true;
- }
- Calendar date = Calendar.getInstance();
- date.setTime(nowTime);
- Calendar begin = Calendar.getInstance();
- begin.setTime(startTime);
- Calendar end = Calendar.getInstance();
- end.setTime(endTime);
- if (date.after(begin) && date.before(end)) {
- return true;
- } else {
- return false;
- }
- }
- //=================================时间格式转换==========================
- /**
- * date类型进行格式化输出
- *
- * @param pattern
- * @return
- */
- public static String dateNow(String pattern) {
- Date date = new Date();
- if (pattern == null && "".equals(pattern)) {
- return null;
- }
- SimpleDateFormat formatter = new SimpleDateFormat(pattern);
- String dateString = formatter.format(date);
- return dateString;
- }
- /**
- * date类型进行格式化输出
- *
- * @param date
- * @param pattern
- * @return
- */
- public static String dateToString(Date date, String pattern) {
- if (StringUtil.isEmpty(pattern) && date == null) {
- return null;
- }
- SimpleDateFormat formatter = new SimpleDateFormat(pattern);
- String dateString = formatter.format(date);
- return dateString;
- }
- /**
- * date类型进行格式化输出(返回类型:String)
- *
- * @param date
- * @return
- */
- public static String dateFormat(Date date) {
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
- String dateString = formatter.format(date);
- return dateString;
- }
- /**
- * date类型进行格式化输出(返回类型:String)
- *
- * @param date
- * @return
- */
- public static String daFormat(Date date) {
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd" );
- String dateString = formatter.format(date);
- return dateString;
- }
- /**
- * date类型进行格式化输出(返回类型:String)
- *
- * @param date
- * @return
- */
- public static String dateFormatByPattern(Date date, String pattern) {
- SimpleDateFormat formatter = new SimpleDateFormat(pattern);
- String dateString = formatter.format(date);
- return dateString;
- }
- /**
- * 时间戳类型进行格式化输出(返回类型:String)
- *
- * @param date
- * @return
- */
- public static String daFormat(Long date) {
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd" );
- Date time = new Date(date);
- String dateString = formatter.format(time);
- return dateString;
- }
- /**
- * 时间戳类型进行格式化输出yyyy-MM-dd(返回类型:String)
- *
- * @param date
- * @return
- */
- public static String daFormatYmd(Long date) {
- DateTimeFormatter ftf = DateTimeFormatter.ofPattern("yyyy-MM-dd" );
- String dateString = ftf.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(date), ZoneId.of("+8" )));
- return dateString;
- }
- /**
- * 时间戳类型进行格式化输出(返回类型:String)
- *
- * @param date
- * @return
- */
- public static String daFormatHHMMSSAddEight(Long date) {
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
- Date time = dateAddHours(new Date(date), 8);
- String dateString = formatter.format(time);
- return dateString;
- }
- /**
- * 时间戳类型进行格式化输出(返回类型:String)
- *
- * @param date
- * @return
- */
- public static String daFormatHHMMSS(Long date) {
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
- Date time = new Date(date);
- String dateString = formatter.format(time);
- return dateString;
- }
- /**
- * 将"2015-08-31 21:08:06"型字符串转化为Date
- *
- * @param str
- * @return
- * @throws ParseException
- */
- public static Date stringToDate(String str) {
- Date date = null;
- if (StringUtil.isEmpty(str)) {
- return date;
- }
- try {
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
- date = formatter.parse(str);
- } catch (ParseException e) {
- System.out.println(e.getMessage());
- return date;
- }
- return date;
- }
- /**
- * 将"2015-08-31"型字符串转化为Date
- *
- * @param str
- * @return
- * @throws ParseException
- */
- public static Date stringToDates(String str) {
- Date date = null;
- try {
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd" );
- date = formatter.parse(str);
- } catch (ParseException e) {
- return date;
- }
- return date;
- }
- /**
- * 将CST时间类型字符串进行格式化输出
- *
- * @param str
- * @return
- * @throws ParseException
- */
- public static String cstFormat(String str) {
- try {
- SimpleDateFormat formatter = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy" , Locale.US);
- Date date = formatter.parse(str);
- return dateFormat(date);
- } catch (Exception e) {
- return "";
- }
- }
- /**
- * 将long类型转化为Date
- *
- * @param str
- * @return
- * @throws ParseException
- */
- public static Date longToDate(long str) throws ParseException {
- return new Date(str * 1000);
- }
- //====================================其他常见日期操作方法======================
- /**
- * 判断当前日期是否在[startDate, endDate]区间
- *
- * @param startDate 开始日期
- * @param endDate 结束日期
- * @return
- * @author jqlin
- */
- public static boolean isEffectiveDate(Date startDate, Date endDate) {
- if (startDate == null || endDate == null) {
- return false;
- }
- long currentTime = System.currentTimeMillis();
- if (currentTime >= startDate.getTime()
- && currentTime <= endDate.getTime()) {
- return true;
- }
- return false;
- }
- /**
- * 得到二个日期间的间隔天数
- *
- * @param secondString:后一个日期
- * @param firstString:前一个日期
- * @return
- */
- public static String getTwoDay(String secondString, String firstString) {
- SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd" );
- long day = 0;
- try {
- Date secondTime = myFormatter.parse(secondString);
- Date firstTime = myFormatter.parse(firstString);
- day = (secondTime.getTime() - firstTime.getTime()) / (24 * 60 * 60 * 1000);
- } catch (Exception e) {
- return "";
- }
- return day + "";
- }
- /**
- * 时间前推或后推分钟,其中JJ表示分钟.
- *
- * @param stringTime:时间
- * @param minute:分钟(有正负之分)
- * @return
- */
- public static String getPreTime(String stringTime, String minute) {
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
- String mydate1 = "";
- try {
- Date date1 = format.parse(stringTime);
- long time = (date1.getTime() / 1000) + Integer.parseInt(minute) * 60;
- date1.setTime(time * 1000);
- mydate1 = format.format(date1);
- } catch (Exception e) {
- return "";
- }
- return mydate1;
- }
- /**
- * 时间转成成秒
- */
- public static long getTime(Date data) {
- if (data != null) {
- return (data.getTime() / 1000);
- }
- return 0;
- }
- /**
- * 将短时间格式字符串转换为时间 yyyy-MM-dd
- *
- * @param strDate
- * @return
- */
- public static Date strToDate(String strDate) {
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd" );
- ParsePosition pos = new ParsePosition(0);
- Date strtodate = formatter.parse(strDate, pos);
- return strtodate;
- }
- /**
- * 得到一个时间延后或前移几天的时间
- *
- * @param nowdate:时间
- * @param delay:前移或后延的天数
- * @return
- */
- public static String getNextDay(String nowdate, String delay) {
- try {
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd" );
- String mdate = "";
- Date d = strToDate(nowdate);
- long myTime = (d.getTime() / 1000) + Integer.parseInt(delay) * 24 * 60 * 60;
- d.setTime(myTime * 1000);
- mdate = format.format(d);
- return mdate;
- } catch (Exception e) {
- return "";
- }
- }
- /**
- * 判断是否闰年
- *
- * @param ddate
- * @return
- */
- public static boolean isLeapYear(String ddate) {
- /**
- * 详细设计: 1.被400整除是闰年,否则: 2.不能被4整除则不是闰年 3.能被4整除同时不能被100整除则是闰年
- * 3.能被4整除同时能被100整除则不是闰年
- */
- Date d = strToDate(ddate);
- GregorianCalendar gc = (GregorianCalendar) Calendar.getInstance();
- gc.setTime(d);
- int year = gc.get(Calendar.YEAR);
- if ((year % 400) == 0) {
- return true;
- } else if ((year % 4) == 0) {
- if ((year % 100) == 0) {
- return false;
- } else {
- return true;
- }
- } else {
- return false;
- }
- }
- /**
- * 返回美国时间格式
- *
- * @param str
- * @return
- */
- public static String geteDate(String str) {
- SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd" );
- ParsePosition pos = new ParsePosition(0);
- Date strtodate = formatter.parse(str, pos);
- String j = strtodate.toString();
- String[] k = j.split(" " );
- return k[2] + k[1].toUpperCase() + k[5].substring(2, 4);
- }
- /**
- * 判断二个时间是否在同一个周
- *
- * @param date1
- * @param date2
- * @return
- */
- public static boolean isSameWeekDates(Date date1, Date date2) {
- Calendar cal1 = Calendar.getInstance();
- Calendar cal2 = Calendar.getInstance();
- cal1.setTime(date1);
- cal2.setTime(date2);
- int subYear = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
- if (0 == subYear) {
- if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) {
- return true;
- }
- } else if (1 == subYear && 11 == cal2.get(Calendar.MONTH)) {
- // 如果12月的最后一周横跨来年第一周的话则最后一周即算做来年的第一周
- if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) {
- return true;
- }
- } else if (-1 == subYear && 11 == cal1.get(Calendar.MONTH)) {
- if (cal1.get(Calendar.WEEK_OF_YEAR) == cal2.get(Calendar.WEEK_OF_YEAR)) {
- return true;
- }
- }
- return false;
- }
- /**
- * 产生周序列,即得到当前时间所在的年度是第几周
- *
- * @return
- */
- public static String getSeqWeek() {
- Calendar c = Calendar.getInstance(Locale.CHINA);
- String week = Integer.toString(c.get(Calendar.WEEK_OF_YEAR));
- if (week.length() == 1) {
- week = "0" + week;
- }
- String year = Integer.toString(c.get(Calendar.YEAR));
- return year + "年第" + week + "周";
- }
- /**
- * 获得一个日期所在的周的星期几的日期,如要找出2002年2月3日所在周的星期一是几号
- *
- * @param sdate:日期
- * @param num:星期几(星期天是一周的第一天)
- * @return
- */
- public static String getWeek(String sdate, String num) {
- // 再转换为时间
- Date dd = strToDate(sdate);
- Calendar c = Calendar.getInstance();
- c.setTime(dd);
- if ("1".equals(num)) {
- // 返回星期一所在的日期
- c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY);
- } else if ("2".equals(num)) {
- // 返回星期二所在的日期
- c.set(Calendar.DAY_OF_WEEK, Calendar.TUESDAY);
- } else if ("3".equals(num)) {
- // 返回星期三所在的日期
- c.set(Calendar.DAY_OF_WEEK, Calendar.WEDNESDAY);
- } else if ("4".equals(num)) {
- // 返回星期四所在的日期
- c.set(Calendar.DAY_OF_WEEK, Calendar.THURSDAY);
- } else if ("5".equals(num)) {
- // 返回星期五所在的日期
- c.set(Calendar.DAY_OF_WEEK, Calendar.FRIDAY);
- } else if ("6".equals(num)) {
- // 返回星期六所在的日期
- c.set(Calendar.DAY_OF_WEEK, Calendar.SATURDAY);
- } else if ("0".equals(num)) {
- // 返回星期日所在的日期
- c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
- }
- return new SimpleDateFormat("yyyy-MM-dd" ).format(c.getTime());
- }
- /**
- * 根据一个日期,返回是星期几的字符串
- *
- * @param sdate
- * @return
- */
- public static String getWeek(String sdate) {
- // 再转换为时间
- Date date = strToDate(sdate);
- Calendar c = Calendar.getInstance();
- c.setTime(date);
- return new SimpleDateFormat("EEEE" ).format(c.getTime());
- }
- /**
- * 根据一个日期,返回是星期几的字符串
- *
- * @param sdate
- * @return
- */
- public static String getWeekStr(String sdate) {
- String str = "";
- str = getWeek(sdate);
- if ("1".equals(str)) {
- str = "星期日";
- } else if ("2".equals(str)) {
- str = "星期一";
- } else if ("3".equals(str)) {
- str = "星期二";
- } else if ("4".equals(str)) {
- str = "星期三";
- } else if ("5".equals(str)) {
- str = "星期四";
- } else if ("6".equals(str)) {
- str = "星期五";
- } else if ("7".equals(str)) {
- str = "星期六";
- }
- return str;
- }
- /**
- * 根据一个日期,返回是星期几的字符串
- *
- * @param date
- * @return
- */
- public static String getWeekStr(Date date) {
- Calendar c = Calendar.getInstance();
- c.setTime(date);
- String str = c.get(Calendar.DAY_OF_WEEK) + "";
- if ("1".equals(str)) {
- str = "SUN";
- } else if ("2".equals(str)) {
- str = "MON";
- } else if ("3".equals(str)) {
- str = "TUE";
- } else if ("4".equals(str)) {
- str = "WED";
- } else if ("5".equals(str)) {
- str = "THU";
- } else if ("6".equals(str)) {
- str = "FRI";
- } else if ("7".equals(str)) {
- str = "SAT";
- }
- return str;
- }
- /**
- * 两个时间之间的天数
- *
- * @param date1
- * @param date2
- * @return
- */
- public static long getDays(String date1, String date2) {
- if (date1 == null || "".equals(date1)) {
- return 0;
- }
- if (date2 == null || "".equals(date2)) {
- return 0;
- }
- // 转换为标准时间
- SimpleDateFormat myFormatter = new SimpleDateFormat("yyyy-MM-dd" );
- Date date = null;
- Date mydate = null;
- try {
- date = myFormatter.parse(date1);
- mydate = myFormatter.parse(date2);
- } catch (Exception e) {
- throw new RuntimeException(e);
- }
- long day = (date.getTime() - mydate.getTime()) / (24 * 60 * 60 * 1000);
- return day;
- }
- /**
- * 形成如下的日历 , 根据传入的一个时间返回一个结构 星期日 星期一 星期二 星期三 星期四 星期五 星期六 下面是当月的各个时间
- * 此函数返回该日历第一行星期日所在的日期
- *
- * @param sdate
- * @return
- */
- public static String getNowMonth(String sdate) {
- // 取该时间所在月的一号
- sdate = sdate.substring(0, 8) + "01";
- // 得到这个月的1号是星期几
- Date date = strToDate(sdate);
- Calendar c = Calendar.getInstance();
- c.setTime(date);
- int u = c.get(Calendar.DAY_OF_WEEK);
- String newday = getNextDay(sdate, (1 - u) + "" );
- return newday;
- }
- /**
- * 根据用户传入的时间表示格式,返回当前时间的格式 如果是yyyyMMdd,注意字母y不能大写
- *
- * @param sformat
- * @return
- */
- public static String getUserDate(String sformat) {
- Date currentTime = new Date();
- SimpleDateFormat formatter = new SimpleDateFormat(sformat);
- String dateString = formatter.format(currentTime);
- return dateString;
- }
- /**
- * 根据用户传入的时间表示格式,返回当前时间的格式 如果是yyyyMMdd,注意字母y不能大写
- *
- * @param sformat
- * @return
- */
- public static String getDateString(Date date, String sformat) {
- Date currentTime = null;
- if (date == null) {
- currentTime = new Date();
- } else {
- currentTime = date;
- }
- SimpleDateFormat formatter = new SimpleDateFormat(sformat);
- String dateString = formatter.format(currentTime);
- return dateString;
- }
- /**
- * 返回一个i位数的随机数
- *
- * @param i
- * @return
- */
- public static String getRandom(int i) {
- Random jjj = new Random();
- if (i == 0) {
- return "";
- }
- String jj = "";
- for (int k = 0; k < i; k++) {
- jj = jj + jjj.nextInt(9);
- }
- return jj;
- }
- //====================================日期格式转换======================
- /**
- * Date转换为LocalDateTime
- *
- * @param date
- */
- public static LocalDateTime dateToLocalDateTime(Date date) {
- if (date != null) {
- //An instantaneous point on the time-line.(时间线上的一个瞬时点。)
- Instant instant = date.toInstant();
- //A time-zone ID, such ZxingCodeUtil {@code Europe/Paris}.(时区)
- ZoneId zoneId = ZoneId.systemDefault();
- LocalDateTime localDateTime = instant.atZone(zoneId).toLocalDateTime();
- return localDateTime;
- }
- return null;
- }
- /**
- * LocalDateTime转换为Date
- *
- * @param localDateTime
- */
- public static Date localDateTimeToDate(LocalDateTime localDateTime) {
- if (localDateTime != null) {
- ZoneId zoneId = ZoneId.systemDefault();
- //Combines this date-time with a time-zone to create a ZonedDateTime.
- ZonedDateTime zdt = localDateTime.atZone(zoneId);
- Date date = Date.from(zdt.toInstant());
- return date;
- }
- return null;
- }
- //====================================当前时间加减======================
- /**
- * 时间加减小时
- *
- * @param startDate 要处理的时间,Null则为当前时间
- * @param hours 加减的小时
- * @return Date
- */
- public static Date dateAddHours(Date startDate, int hours) {
- if (startDate == null) {
- startDate = new Date();
- }
- Calendar c = Calendar.getInstance();
- c.setTime(startDate);
- c.set(Calendar.HOUR, c.get(Calendar.HOUR) + hours);
- return c.getTime();
- }
- /**
- * 时间加减分钟
- *
- * @param startDate 要处理的时间,Null则为当前时间
- * @param minutes 加减的分钟
- * @return Date
- */
- public static Date dateAddMinutes(Date startDate, int minutes) {
- if (startDate == null) {
- startDate = new Date();
- }
- Calendar c = Calendar.getInstance();
- c.setTime(startDate);
- c.set(Calendar.MINUTE, c.get(Calendar.MINUTE) + minutes);
- return c.getTime();
- }
- /**
- * 时间加减秒数
- *
- * @param startDate 要处理的时间,Null则为当前时间
- * @param seconds 加减的秒数
- * @return Date
- */
- public static Date dateAddSeconds(Date startDate, int seconds) {
- if (startDate == null) {
- startDate = new Date();
- }
- Calendar c = Calendar.getInstance();
- c.setTime(startDate);
- c.set(Calendar.SECOND, c.get(Calendar.SECOND) + seconds);
- return c.getTime();
- }
- /**
- * 时间加减年数
- *
- * @param startDate 要处理的时间,Null则为当前时间
- * @param years 加减的年数
- * @return Date
- */
- public static Date dateAddYears(Date startDate, int years) {
- if (startDate == null) {
- startDate = new Date();
- }
- Calendar c = Calendar.getInstance();
- c.setTime(startDate);
- c.set(Calendar.YEAR, c.get(Calendar.YEAR) + years);
- return c.getTime();
- }
- /**
- * 时间加减月数
- *
- * @param startDate 要处理的时间,Null则为当前时间
- * @param months 加减的月数
- * @return Date
- */
- public static Date dateAddMonths(Date startDate, int months) {
- if (startDate == null) {
- startDate = new Date();
- }
- Calendar c = Calendar.getInstance();
- c.setTime(startDate);
- c.set(Calendar.MONTH, c.get(Calendar.MONTH) + months);
- return c.getTime();
- }
- /**
- * 时间加减天数
- *
- * @param startDate 要处理的时间,Null则为当前时间
- * @param days 加减的天数
- * @return Date
- */
- public static Date dateAddDays(Date startDate, int days) {
- if (startDate == null) {
- startDate = new Date();
- }
- Calendar c = Calendar.getInstance();
- c.setTime(startDate);
- c.set(Calendar.DATE, c.get(Calendar.DATE) + days);
- return c.getTime();
- }
- /**
- * 时间加减小时
- *
- * @param localDateTime 要处理的时间,Null则为当前时间
- * @param hours 加减的小时
- * @return Date
- */
- public static LocalDateTime localDateAddHours(LocalDateTime localDateTime, int hours) {
- if (localDateTime == null) {
- localDateTime = LocalDateTime.now();
- }
- return localDateTime.plusHours(hours);
- }
- /**
- * 时间加减分钟
- *
- * @param localDateTime 要处理的时间,Null则为当前时间
- * @param minutes 加减的分钟
- * @return Date
- */
- public static LocalDateTime localDateAddMinutes(LocalDateTime localDateTime, int minutes) {
- if (localDateTime == null) {
- localDateTime = LocalDateTime.now();
- }
- return localDateTime.plusMinutes(minutes);
- }
- /**
- * 时间加减秒数
- *
- * @param localDateTime 要处理的时间,Null则为当前时间
- * @param seconds 加减的秒数
- * @return Date
- */
- public static LocalDateTime localDateAddSeconds(LocalDateTime localDateTime, int seconds) {
- if (localDateTime == null) {
- localDateTime = LocalDateTime.now();
- }
- return localDateTime.plusSeconds(seconds);
- }
- /**
- * 时间加减年数
- *
- * @param localDateTime 要处理的时间,Null则为当前时间
- * @param years 加减的年数
- * @return Date
- */
- public static LocalDateTime localDateAddYears(LocalDateTime localDateTime, int years) {
- if (localDateTime == null) {
- localDateTime = LocalDateTime.now();
- }
- return localDateTime.plusYears(years);
- }
- /**
- * 时间加减月数
- *
- * @param localDateTime 要处理的时间,Null则为当前时间
- * @param months 加减的月数
- * @return Date
- */
- public static LocalDateTime localDateMonths(LocalDateTime localDateTime, int months) {
- if (localDateTime == null) {
- localDateTime = LocalDateTime.now();
- }
- return localDateTime.plusMonths(months);
- }
- /**
- * 时间加减天数
- *
- * @param localDateTime 要处理的时间,Null则为当前时间
- * @param days 加减的天数
- * @return Date
- */
- public static LocalDateTime localDateAddDays(LocalDateTime localDateTime, int days) {
- if (localDateTime == null) {
- localDateTime = LocalDateTime.now();
- }
- return localDateTime.plusDays(days);
- }
- //====================================时间比较======================
- /**
- * 时间比较(如果myDate>compareDate返回1,<返回-1,相等返回0)
- *
- * @param myDate 时间
- * @param compareDate 要比较的时间
- * @return int
- */
- public static int dateCompare(Date myDate, Date compareDate) {
- Calendar myCal = Calendar.getInstance();
- Calendar compareCal = Calendar.getInstance();
- myCal.setTime(myDate);
- compareCal.setTime(compareDate);
- return myCal.compareTo(compareCal);
- }
- /**
- * 获取两个时间中最小的一个时间
- *
- * @param date
- * @param compareDate
- * @return Date
- */
- public static Date dateMin(Date date, Date compareDate) {
- if (date == null) {
- return compareDate;
- }
- if (compareDate == null) {
- return date;
- }
- if (1 == dateCompare(date, compareDate)) {
- return compareDate;
- } else if (-1 == dateCompare(date, compareDate)) {
- return date;
- }
- return date;
- }
- /**
- * 获取两个时间中最大的一个时间
- *
- * @param date
- * @param compareDate
- * @return Date
- */
- public static Date dateMax(Date date, Date compareDate) {
- if (date == null) {
- return compareDate;
- }
- if (compareDate == null) {
- return date;
- }
- if (1 == dateCompare(date, compareDate)) {
- return date;
- } else if (-1 == dateCompare(date, compareDate)) {
- return compareDate;
- }
- return date;
- }
- /**
- * 获取时间当年某个月的最后一天
- *
- * @param startDate
- * @param month 月份
- * @return int 天数
- */
- public static int getLastDayOfMonth(Date startDate, int month) {
- if (startDate == null) {
- startDate = new Date();
- }
- Calendar c = Calendar.getInstance();
- c.setTime(startDate);
- c.set(c.get(Calendar.YEAR), month, 1);
- c.add(Calendar.DATE, -1);
- int day = c.get(Calendar.DAY_OF_MONTH);
- return day;
- }
- /**
- * 获取固定日期范围内的所有日期,以数组形式返回
- */
- public static List<Date> getAllDays(Date startTime, Date endTime) {
- List<Date> listDay = new ArrayList<>();
- Date dtDay = new Date();
- for (dtDay = startTime; dtDay.compareTo(endTime) <= 0; dtDay = DateUtil.dateAddDays(dtDay, 1)) {
- listDay.add(dtDay);
- }
- return listDay;
- }
- //====================================通过cron转换成时间======================
- /**
- * 获取最近几次的运行时间
- *
- * @param cron 表达式
- * @param numTimes 次数
- * @return
- */
- public static List<String> getRecentExecTime(String cron, int numTimes) {
- List<String> list = new ArrayList<>();
- try {
- CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
- cronTriggerImpl.setCronExpression(cron);
- // 这个是重点,一行代码搞定
- List<Date> dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, numTimes);
- SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
- for (Date date : dates) {
- list.add(dateFormat.format(date));
- }
- } catch (ParseException e) {
- e.getMessage();
- }
- return list;
- }
- /**
- * 获取从某个时间段下一次执行的运行时间
- *
- * @param cron 表达式
- * @param dates 日期
- * @return
- */
- public static String getNextCron(String cron, Date dates) {
- String crons = null;
- if (dates == null) {
- dates = new Date();
- }
- if (StringUtil.isEmpty(cron)) {
- return crons;
- }
- CronExpression cronExpression = null;
- try {
- cronExpression = new CronExpression(cron);
- } catch (ParseException e) {
- System.out.println(e.getMessage());
- return crons;
- }
- Date date = cronExpression.getNextValidTimeAfter(dates);
- if (date != null) {
- crons = dateFormat(date);
- }
- return crons;
- }
- /**
- * 获取从某个时间段下一次执行的运行时间
- *
- * @param cron 表达式
- * @param dates 日期
- * @return
- */
- public static Date getNextCronDate(String cron, Date dates) {
- Date crons = new Date();
- if (dates == null) {
- dates = new Date();
- }
- if (StringUtil.isEmpty(cron)) {
- return crons;
- }
- CronExpression cronExpression = null;
- try {
- cronExpression = new CronExpression(cron);
- } catch (ParseException e) {
- System.out.println(e.getMessage());
- return crons;
- }
- Date date = cronExpression.getNextValidTimeAfter(dates);
- return date;
- }
- public static void getNextDate(int num, String repetition, Date dates, Date repeatTime, List<Date> dataList) {
- if (dates == null) {
- dates = new Date();
- }
- if (repeatTime == null) {
- repeatTime = new Date();
- }
- int result = 0;
- List<String> repetitionList = new ArrayList() {{
- add("2" );
- add("3" );
- add("4" );
- add("5" );
- }};
- if (ObjectUtil.isNotEmpty(repetition) && repetitionList.contains(repetition)) {
- switch (repetition) {
- case "2":
- DateTime day = cn.hutool.core.date.DateUtil.offsetDay(dates, num);
- if (day.getTime() <= repeatTime.getTime()) {
- dataList.add(day);
- num++;
- result++;
- }
- break;
- case "3":
- DateTime week = cn.hutool.core.date.DateUtil.offsetDay(dates, num * 7);
- if (week.getTime() <= repeatTime.getTime()) {
- dataList.add(week);
- num++;
- result++;
- }
- break;
- case "4":
- DateTime month = cn.hutool.core.date.DateUtil.offsetMonth(dates, num);
- if (month.getTime() <= repeatTime.getTime()) {
- dataList.add(month);
- num++;
- result++;
- }
- break;
- case "5":
- DateTime year = cn.hutool.core.date.DateUtil.offsetMonth(dates, num * 12);
- if (year.getTime() <= repeatTime.getTime()) {
- dataList.add(year);
- num++;
- result++;
- }
- break;
- default:
- break;
- }
- if (result > 0) {
- getNextDate(num, repetition, dates, repeatTime, dataList);
- }
- } else {
- dataList.add(dates);
- }
- }
- public static void getNextDate(Date dates, String repetition, Date repeatTime, List<Date> dataList) {
- if (dates == null) {
- dates = new Date();
- }
- if (repeatTime == null) {
- repeatTime = new Date();
- }
- List<String> repetitionList = new ArrayList() {{
- add("2" );
- add("3" );
- add("4" );
- add("5" );
- }};
- if (repeatTime.getTime() >= dates.getTime() && ObjectUtil.isNotEmpty(repetition) && repetitionList.contains(repetition)) {
- dataList.add(dates);
- Date date = dates;
- switch (repetition) {
- case "2":
- date = cn.hutool.core.date.DateUtil.offsetDay(dates, 1);
- break;
- case "3":
- date = cn.hutool.core.date.DateUtil.offsetDay(dates, 7);
- break;
- case "4":
- date = cn.hutool.core.date.DateUtil.offsetMonth(dates, 1);
- break;
- case "5":
- date = cn.hutool.core.date.DateUtil.offsetMonth(dates, 12);
- break;
- default:
- break;
- }
- getNextDate(date, repetition, repeatTime, dataList);
- } else if (!repetitionList.contains(repetition)) {
- dataList.add(dates);
- }
- }
- /**
- * 时间转成cron
- *
- * @return
- */
- public static String getDateToCron(Date date) {
- String cron = null;
- String dateFormat = "ss mm HH dd MM ?";
- if (date == null) {
- cron = dateNow(dateFormat);
- } else {
- cron = dateToString(date, dateFormat);
- }
- return cron;
- }
- public static boolean timeCalendar(Date nowTime, Date dayTimeStart, Date dayTimeEnd) {
- //设置当前时间
- Calendar date = Calendar.getInstance();
- date.setTime(nowTime);
- //设置开始时间
- Calendar timeStart = Calendar.getInstance();
- timeStart.setTime(dayTimeStart);
- //设置结束时间
- Calendar timeEnd = Calendar.getInstance();
- timeEnd.setTime(dayTimeEnd);
- if (date.equals(timeStart) || date.equals(timeEnd)) {
- return true;
- }
- if ((date.after(timeStart) && date.before(timeEnd))) {
- return true;
- } else {
- return false;
- }
- }
- public static boolean isValidDate(String str) {
- boolean convertSuccess = true;
- // 指定日期格式为四位年/两位月份/两位日期,注意yyyy/MM/dd区分大小写;
- SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss" );
- if (str.length() == 10) {
- format = new SimpleDateFormat("yyyy-MM-dd" );
- }
- try {
- //设置lenient为false. 否则SimpleDateFormat会比较宽松地验证日期,比如2007/02/29会被接受,并转换成2007/03/01
- format.setLenient(false);
- format.parse(str);
- } catch (ParseException e) {
- convertSuccess = false;
- }
- return convertSuccess;
- }
- public static boolean isOverlap(Date leftStartDate, Date leftEndDate, Date rightStartDate, Date rightEndDate) {
- return ((leftStartDate.getTime() >= rightStartDate.getTime())
- && leftStartDate.getTime() < rightEndDate.getTime())
- ||
- ((leftStartDate.getTime() > rightStartDate.getTime())
- && leftStartDate.getTime() <= rightEndDate.getTime())
- ||
- ((rightStartDate.getTime() >= leftStartDate.getTime())
- && rightStartDate.getTime() < leftEndDate.getTime())
- ||
- ((rightStartDate.getTime() > leftStartDate.getTime())
- && rightStartDate.getTime() <= leftEndDate.getTime());
- }
- /**
- * 时间范围添加连接符
- *
- * @param jsonArray
- * @param type
- * @param format
- * @return
- */
- public static JSONArray addCon(JSONArray jsonArray, String type, String format) {
- if ("timeRange".equals(type)) {
- String value1 = jsonArray.get(0).toString();
- String value2 = jsonArray.get(1).toString();
- jsonArray.clear();
- jsonArray.add(value1 + "至" );
- jsonArray.add(value2);
- }
- if ("dateRange".equals(type)) {
- DateTimeFormatter ftfDateRange = DateTimeFormatter.ofPattern(format);
- long date1 = Long.parseLong(String.valueOf(jsonArray.get(0)));
- long date2 = Long.parseLong(String.valueOf(jsonArray.get(1)));
- String value1 = ftfDateRange.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(date1), ZoneId.systemDefault()));
- String value2 = ftfDateRange.format(LocalDateTime.ofInstant(Instant.ofEpochMilli(date2), ZoneId.systemDefault()));
- jsonArray.clear();
- jsonArray.add(value1 + "至" );
- jsonArray.add(value2);
- }
- return jsonArray;
- }
- /**
- * 获取时间戳
- */
- public static Long getMillis2() {
- return Instant.now().toEpochMilli();
- }
- /**
- * LocalDateTime转时间戳
- */
- public static Long localDateTime2Millis(LocalDateTime localDateTime) {
- return localDateTime.toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
- }
- /**
- * LocalDate转时间戳
- */
- public static Long localDate2Millis(LocalDate localDate) {
- return LocalDateTime.of(localDate, LocalTime.MIN).toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
- }
- /**
- * Clock转时间戳
- */
- public static Long clock2Millis(Clock clock) {
- return clock.millis();
- }
- /**
- * ZoneDateTIme转时间戳(这个不常用吧~)
- */
- public static Long zoneDateTime2Millis(ZonedDateTime zonedDateTime) {
- return zonedDateTime.toLocalDateTime().toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
- }
- /**
- * String转时间戳(JDK8)
- */
- public static Long string2MillisWithJdk8(String dateStr, String formatStr) {
- return LocalDateTime.parse(dateStr, DateTimeFormatter.ofPattern(formatStr)).toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
- }
- /**
- * ZonedDateTime转String
- *
- * @param zonedDateTime
- * @return
- */
- public static String getZonedDateTimeToString(ZonedDateTime zonedDateTime) {
- ZonedDateTime zoneDateTime1 = zonedDateTime.plusHours(11);
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss" );
- return zoneDateTime1.format(formatter);
- }
- /**
- * 根据格式判断时间值是否正确
- * @param dataStr
- * @param format
- * @return
- */
- public static Date checkDate(String dataStr,String format){
- try {
- if (format.length() != dataStr.length()) throw new DataException();
- SimpleDateFormat formatter = new SimpleDateFormat(format);
- formatter.setLenient(false);
- return formatter.parse(dataStr);
- } catch (Exception e) {
- return null;
- }
- }
- }
|