时间工具类

发布时间:2025-12-10 11:50:39 浏览次数:7

package com.xiolift.common.util;import com.xiolift.common.other.HttpClientUtil;import java.text.DateFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.*;/*** @author cheng.hao* @date 2020年1月6日12:00:00*/public class DateUtils {public static String DATE_PATTERN = "yyyy-MM-dd";public static String DATE_FORMAT_FULL = "yyyy-MM-dd HH:mm:ss";public static Integer DAY = 1;public static Integer WEEK = 2;public static Integer MONTH = 3;public static Integer YEAR = 4;public static String parseDateToString(Date date, String dataFormat) {if (date == null) {return "";}SimpleDateFormat dateFormat = new SimpleDateFormat(dataFormat);return dateFormat.format(date);}public static String format(Date date) {return format(date, DATE_PATTERN);}/*** 获取时间的小时* @param date* @return*/public static Integer getHour(Date date){if(date==null){return null;}return getCalendar(date).get(Calendar.HOUR_OF_DAY);}public static Calendar getCalendar(Date date){if(date==null){return null;}DateFormat df = DateFormat.getDateInstance();df.format(date);return df.getCalendar();}public static String format(Date date, String pattern) {if (date != null) {SimpleDateFormat df = new SimpleDateFormat(pattern);return df.format(date);}return null;}/*** 返回当天的0点钟* @param date* @return*/public static Date getTimeOf12(Date date) {Calendar cal = Calendar.getInstance();cal.setTime(date);cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.SECOND, 0);cal.set(Calendar.MILLISECOND, 0);return cal.getTime();}public static Date format(Long dateTime){return new Date(dateTime);}/*** 获取当前时间毫米数* @return*/public static Long currentTimeMillis(){DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");long now = System.currentTimeMillis();return now;}/*** 判断当前时间距离第二天凌晨的秒数** @return 返回值单位为[s:秒]*/public static Long getSecondsNextEarlyMorning() {Calendar cal = Calendar.getInstance();cal.add(Calendar.DAY_OF_YEAR, 1);cal.set(Calendar.HOUR_OF_DAY, 0);cal.set(Calendar.SECOND, 0);cal.set(Calendar.MINUTE, 0);cal.set(Calendar.MILLISECOND, 0);return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;}/*** 返回给定日期的前几天* @param date* @param days* @return*/public static Date getDateBefore(Date date, int days) {Calendar c = Calendar.getInstance();c.setTime(date);int day = c.get(Calendar.DATE);c.set(Calendar.DATE, day - days);return c.getTime();}/*** 返回给定日期的后几天* @param date* @param days* @return*/public static Date getDateAfter(Date date, int days) {Calendar c = Calendar.getInstance();c.setTime(date);int day = c.get(Calendar.DATE);c.set(Calendar.DATE, day + days);return c.getTime();}/*** 返回给定日期的后几年* @param date* @param* @return*/public static Date getDateAfterYears(Date date, int years) {Calendar c = Calendar.getInstance();c.setTime(date);int year = c.get(Calendar.YEAR);c.set(Calendar.YEAR, year + years);return c.getTime();}/*** 返回给定日期的后几月* @param date* @param* @return*/public static Date getDateAfterMonths(Date date, int months) {Calendar c = Calendar.getInstance();c.setTime(date);int month = c.get(Calendar.MONTH);c.set(Calendar.MONTH, month + months);return c.getTime();}/*** 返回给定日期的月份* @param date* @return*/public static Integer getMonth(Date date) {Calendar c = Calendar.getInstance();c.setTime(date);Integer month = c.get(Calendar.MONTH);return month;}/*** 判断给定date1的num个月后和data2是否是同一个月* @param* @return*/public static boolean sameMonth(Date date1, Integer num, Date date2) {Calendar c = Calendar.getInstance();c.setTime(date1);int month1 = c.get(Calendar.MONTH);c.set(Calendar.MONTH, month1 + num);if(c.get(Calendar.MONTH) == getMonth(date2)) {return true;}return false;}public static Date parseStringToDate(String time, String dataFormat) {SimpleDateFormat df = new SimpleDateFormat(dataFormat);Date date = null;if (time == null) {return null;} else {try {String[] timeArray = time.split(" ");int arraySize = timeArray.length;if (arraySize > 1) {date = df.parse(time);} else {time = time + " 00:00:00";date = df.parse(time);}} catch (ParseException e) {System.out.println("字符串时间转date异常.....");}}return date;}public static Date parseStringToDate(String time) {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date date = null;if (time == null) {return null;} else {try {String[] timeArray = time.split(" ");int arraySize = timeArray.length;if (arraySize > 1) {date = df.parse(time);} else {time = time + " 00:00:00";date = df.parse(time);}} catch (ParseException e) {System.out.println("字符串时间转date异常.....");}}return date;}public static Date addMonth(Date date, int monthNum) {Calendar c = Calendar.getInstance();c.setTime(date);c.add(Calendar.MONTH, monthNum);return c.getTime();}public static Date getDateFromString(String src, String pattern) {SimpleDateFormat f = new SimpleDateFormat(pattern);try {return f.parse(src);} catch (ParseException e) {}return null;}public static long getBetweenTwoDaysMinutes(Date dt1, Date dt2) {long between = 0;if ((dt1.getTime() - dt2.getTime()) > 0) {between = (dt1.getTime() - dt2.getTime()) / 1000;} else {between = (dt2.getTime() - dt1.getTime()) / 1000;}long minutes = between / 60;return minutes;}/*** 将北京世界转换成GMT(格林威治)时间方法* * @param* @return*/public static Date getTimeToGMT(Date time) {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");DateFormat gmt = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");gmt.setTimeZone(TimeZone.getTimeZone("GMT"));String gmtStr = gmt.format(time);// 日期 转成 字符串Date gmt_date = null;try {gmt_date = sdf.parse(gmtStr); // 字符串 转成 日期} catch (ParseException e) {e.printStackTrace(); // To change body of catch statement use File |// Settings | File Templates.}return gmt_date;}/*** 将Date(or String)转化为时间戳(十位)* * @param* @return*/public static String getTimeToTimestamps(String time) {SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Long time2 = null;try {time2 = format.parse(time).getTime();} catch (ParseException e) {System.out.println("string类型时间转换成时间戳失败......");}return String.valueOf(time2).substring(0, 10);}/*** 计算minute分钟后的时间* * @param date* @param minute* @return*/public static Date addMinute(Date date, int minute) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.add(Calendar.MINUTE, minute);return calendar.getTime();}/*** 得到day的起始时间点* * @param date* @return*/public static Date getDayStart(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);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();}/*** 得到day的终止时间点.* * @param date* @return*/public static Date getDayEnd(Date date) {Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(Calendar.HOUR_OF_DAY, 0);calendar.set(Calendar.MINUTE, 0);calendar.set(Calendar.SECOND, 0);calendar.set(Calendar.MILLISECOND, 0);calendar.add(Calendar.DAY_OF_MONTH, 1);calendar.add(Calendar.MILLISECOND, -1);return calendar.getTime();}/*** 两个日期相差天数* * @param startDate* @param endDate* @return*/public static long getDateDiff(Date startDate, Date endDate) {if (startDate == null || endDate == null) {return 0L;}long diff = (startDate.getTime() - endDate.getTime()) / (24 * 60 * 60 * 1000) > 0? (startDate.getTime() - endDate.getTime()) / (24 * 60 * 60 * 1000): (endDate.getTime() - startDate.getTime()) / (24 * 60 * 60 * 1000);return diff;}/*** 两个时间段相差多少小时* * @param startDate* @param endDate* @return*/public static long getHourDiff(Date startDate, Date endDate) {if (startDate == null || endDate == null) {return 0L;}long diffTime = endDate.getTime() - startDate.getTime();long hourTime = 60 * 60 * 1000;long diff = diffTime / hourTime;if (diffTime % hourTime > 0) {diff++;}return diff;}/*** 两个时间段相差多少分钟,有余数加1,如果起止时间晚于结束时间会为负数* * @param startDate* @param endDate* @return*/public static long getMinuteDiff(Date startDate, Date endDate) {if (startDate == null || endDate == null) {return 0L;}// getTime(),将date对象转成毫秒long diffTime = endDate.getTime() - startDate.getTime();long minTime = 60 * 1000;long diff = diffTime / minTime;if (diffTime % minTime > 0) {// 取余,加1diff++;}return diff;}/*** 两个时间段相差多少天多少小时多少分钟,返回值为map* * @param startDate* @param endDate* @return*/public static HashMap<String, Integer> getDayAndHourAndMinuteDiff(Date startDate, Date endDate) {if (startDate == null || endDate == null) {HashMap<String, Integer> map = new HashMap<String, Integer>();map.put("day", 0);map.put("hour", 0);map.put("minute", 0);return map;}// getTime(),将date对象转成毫秒long diffTime = endDate.getTime() - startDate.getTime();long dayTime = 24 * 60 * 60 * 1000;long hourTime = 60 * 60 * 1000;long minTime = 60 * 1000;// 相差天数long diffDay = diffTime / dayTime;// 相差小时long b = diffTime - diffDay * dayTime;long diffHour = b / hourTime;// 相差分钟long c =diffTime-(diffDay * dayTime)-(diffHour*hourTime);long diffMinute = c / minTime;if (c % minTime > 0) {// 取余,加1diffMinute++;}HashMap<String, Integer> map = new HashMap<String, Integer>();map.put("day", (int) diffDay);map.put("hour", (int) diffHour);map.put("minute", (int) diffMinute);return map;}/*** 两个时间段相差多少天多少小时,返回值为map* * @param startDate* @param endDate* @return*/public static HashMap<String, Integer> getDayAndHourDiff(Date startDate, Date endDate) {if (startDate == null || endDate == null) {HashMap<String, Integer> map = new HashMap<String, Integer>();map.put("day", 0);map.put("hour", 0);return map;}// getTime(),将date对象转成毫秒long diffTime = endDate.getTime() - startDate.getTime();long dayTime = 24 * 60 * 60 * 1000;long hourTime = 60 * 60 * 1000;// 相差天数long diffDay = diffTime / dayTime;// 相差小时long b = diffTime - diffDay * dayTime;long diffHour = b / hourTime;if (b % hourTime > 0) {// 取余,加1diffHour++;}HashMap<String, Integer> map = new HashMap<String, Integer>();map.put("day", (int) diffDay);map.put("hour", (int) diffHour);return map;}/*** 比较两个日期是不是同一天* @param d1* @param d2* @return*/public static boolean sameDate(Date d1, Date d2) {if(null == d1 || null == d2)return false;//return getOnlyDate(d1).equals(getOnlyDate(d2));Calendar cal1 = Calendar.getInstance();cal1.setTime(d1);Calendar cal2 = Calendar.getInstance();cal2.setTime(d2);return cal1.get(0) == cal2.get(0) && cal1.get(1) == cal2.get(1) && cal1.get(6) == cal2.get(6);}/*** 传入时间data的间隔周期的那天和今天是不是同一天* 周期间隔 type为 1:天 2:周 3:月 4:年* @param date* @param num* @param type* @return*/public static boolean sameDate(Date date, int num, Integer type) {switch(type){case 1:date = getDateAfter(date, num);break;case 2:date = getDateAfter(date, num*7);break;case 3:date = getDateAfterMonths(date, num);break;case 4:date = getDateAfterYears(date, num);break;default:break;}return sameDate(date, new Date());}/*** 确定是不是节假日,是节假日返回true ,工作日进行数据抓取返回false* 返回 3:休息日(即周末)* 返回 2:节假日调休补班(就是要上班!!!!!)。* 返回 1:法定节假日休息(节日 春节啥的) * 返回 0:工作日* @param* @return* @throws Exception */public static boolean isHoliday(Date date) throws Exception {SimpleDateFormat dft2 = new SimpleDateFormat("yyyyMMdd");String newDate=dft2.format(date);String url="http://api.goseek.cn/Tools/holiday?date="+newDate;String result=HttpClientUtil.sendGet(url);Map<String, Object> map = JSONUtils.jsonToMap(result);Integer data = Integer.parseInt((map.get("data").toString()));if(data == 0 || data == 2){return false;}else{return true;}}/*** 获取当前日期是星期几<br>** @param date* @return 当前日期是星期几*/public static Integer getDayOfWeek(Date date) {Integer[] weekDays = { 7, 1, 2, 3, 4, 5, 6 };Calendar cal = Calendar.getInstance();cal.setTime(date);Integer w = cal.get(Calendar.DAY_OF_WEEK) - 1;if (w < 0)w = 0;return weekDays[w];}public static Date getDateByMonthDay(Date yearDate,String monthDay) {String year = format(yearDate, "yyyy");String dateString = year + "-" + monthDay;Date date = parseStringToDate(dateString, DATE_PATTERN);return date;}/*** 根据日期字符串判断当月第几周* @param* @return* @throws Exception*/public static int getWeekOfMonth(Date date){Calendar calendar = Calendar.getInstance();calendar.setTime(date);//第几周int week = calendar.get(Calendar.WEEK_OF_MONTH);return week;}public static Date getMonthFirstDay(Date date){Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(Calendar.DAY_OF_MONTH, 1);return calendar.getTime();}public static Date getMonthLastDay(Date date){Calendar calendar = Calendar.getInstance();calendar.setTime(date);calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH));return calendar.getTime();}/*** 判断当前时间是否在两个之间** @return boolean*/public static boolean judgeIsSetBiddingTime(Date beginTime,Date endTime) {//设置日期格式SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date now = null;try {now = df.parse(df.format(new Date()));} catch (Exception e) {e.printStackTrace();}Calendar date = Calendar.getInstance();date.setTime(now);Calendar begin = Calendar.getInstance();begin.setTime(beginTime);Calendar end = Calendar.getInstance();end.setTime(endTime);return date.after(begin) && date.before(end);}/*** 计算两个日期之间相差的天数* @param smdate 较小的时间* @param bdate 较大的时间* @return 相差天数* @throws ParseException*/public static int daysBetween(Date smdate,Date bdate) throws ParseException{SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");smdate=sdf.parse(sdf.format(smdate));bdate=sdf.parse(sdf.format(bdate));Calendar cal = Calendar.getInstance();cal.setTime(smdate);long time1 = cal.getTimeInMillis();cal.setTime(bdate);long time2 = cal.getTimeInMillis();long between_days=(time2-time1)/(1000*3600*24);return Integer.parseInt(String.valueOf(between_days));}/***字符串的日期格式的计算*/public static int daysBetween(String smdate,String bdate) throws ParseException{SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");Calendar cal = Calendar.getInstance();cal.setTime(sdf.parse(smdate));long time1 = cal.getTimeInMillis();cal.setTime(sdf.parse(bdate));long time2 = cal.getTimeInMillis();long between_days=(time2-time1)/(1000*3600*24);return Integer.parseInt(String.valueOf(between_days));}public static List<String> getDays(String startTime, String endTime) {// 返回的日期集合List<String> days = new ArrayList<String>();DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");try {Date start = dateFormat.parse(startTime);Date end = dateFormat.parse(endTime);Calendar tempStart = Calendar.getInstance();tempStart.setTime(start);Calendar tempEnd = Calendar.getInstance();tempEnd.setTime(end);tempEnd.add(Calendar.DATE, +1);// 日期加1(包含结束)while (tempStart.before(tempEnd)) {days.add(dateFormat.format(tempStart.getTime()));tempStart.add(Calendar.DAY_OF_YEAR, 1);}} catch (ParseException e) {e.printStackTrace();}return days;}/*** Date类型比较开始时间与结束时间,如果开始时间大于结束时间返回False否则返回True* @param startTime* @param endTime* @return*/public static Boolean compareDateTime(Date startTime,Date endTime){long startTimelong = startTime.getTime();long endTimelong = endTime.getTime();return startTimelong > endTimelong ? Boolean.FALSE :Boolean.TRUE;}/*** String类型比较开始时间与结束时间,如果开始时间大于结束时间返回False否则返回True* @param startTime* @param endTime* @return*/public static Boolean compareStringTime(String startTime,String endTime){Date startDate = parseStringToDate(startTime, DATE_FORMAT_FULL);Date endDate = parseStringToDate(endTime, DATE_FORMAT_FULL);long startTimelong = startDate.getTime();long endTimelong = endDate.getTime();return startTimelong > endTimelong ? Boolean.FALSE :Boolean.TRUE;}public static void main(String[] args) {// Date d = new Date();// d = getDateBefore(d, 5);// System.out.println(format(d, "dd"));//获取指定年月第一天 // int startyear=2019;// int lastmonth=2;// Calendar calstar= Calendar.getInstance();//// calstar.set(Calendar.YEAR, startyear);//// calstar.set(Calendar.MONTH, lastmonth-1);//calstar.set(Calendar.DAY_OF_MONTH, 1);//// calstar.set(Calendar.DAY_OF_MONTH, calstar.getActualMaximum(Calendar.DAY_OF_MONTH)); //最后一天// SimpleDateFormat sm = new SimpleDateFormat("yyyyMMdd");// String star =sm.format(calstar.getTime());//// System.out.println("指定月第一天:"+star);// DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");//// long now = System.currentTimeMillis();//// Calendar calendar = Calendar.getInstance();// calendar.setTimeInMillis(now);// Integer hour = getHour(new Date());// System.out.println(hour);List<String> list = getDays("2020-09-23 12:00:00","2020-09-24 12:00:00");System.out.println(list);}}
需要做网站?需要网络推广?欢迎咨询客户经理 13272073477