package com.rnt.utils; import java.io.IOException; import java.net.URL; import java.net.URLConnection; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; public class DateUtil { /** * yyyy-MM-dd HH:mm:ss */ public static final String EN_YEAR_MONTH_DAY_HOUR_MIN_SEC = "yyyy-MM-dd HH:mm:ss"; /** * yyyy-MM-dd HH:mm */ public static final String EN_YEAR_MONTH_DAY_HOUR_MIN = "yyyy-MM-dd HH:mm"; /** * yyyy-MM-dd HH */ public static final String EN_YEAR_MONTH_DAY_HOUR = "yyyy-MM-dd HH"; /** * yyyy-MM-dd */ public static final String EN_YEAR_MONTH_DAY = "yyyy-MM-dd"; /** * yyyy-MM */ public static final String EN_YEAR_MONTH = "yyyy-MM"; /** * yyyy */ public static final String EN_YEAR = "yyyy"; /** * HH:mm:ss */ public static final String EN_HOUR_MIN_SEC = "HH:mm:ss"; /** * HH:mm */ public static final String EN_HOUR_MIN = "HH:mm"; /** * yyyy年MM月dd日 HH时mm分ss秒 */ public static final String CN_YEAR_MONTH_DAY_HOUR_MIN_SEC = "yyyy年MM月dd日 HH时mm分ss秒"; /** * yyyy-MM-dd HH:mm */ public static final String CN_YEAR_MONTH_DAY_HOUR_MIN = "yyyy年MM月dd日 HH时mm分"; /** * yyyy-MM-dd HH */ public static final String CN_YEAR_MONTH_DAY_HOUR = "yyyy年MM月dd日 HH时"; /** * yyyy-MM-dd */ public static final String CN_YEAR_MONTH_DAY = "yyyy年MM月dd日"; /** * yyyy-MM */ public static final String CN_YEAR_MONTH = "yyyy年MM月"; /** * yyyy */ public static final String CN_YEAR = "yyyy年"; /** * HH:mm:ss */ public static final String CN_HOUR_MIN_SEC = "HH时mm分ss秒"; /** * HH:mm */ public static final String CN_HOUR_MIN = "HH时mm分"; public static final int DISTANCE_YEAR = 0; public static final int DISTANCE_MONTH = 1; public static final int DISTANCE_DAY = 2; public static Map patterns = new LinkedHashMap(); static { patterns.put("yyyy-MM-dd HH:mm:ss", "EN_YEAR_MONTH_DAY_HOUR_MIN_SEC"); patterns.put("yyyy-MM-dd HH:mm", "EN_YEAR_MONTH_DAY_HOUR_MIN"); patterns.put("yyyy-MM-dd HH", "EN_YEAR_MONTH_DAY_HOUR"); patterns.put("yyyy-MM-dd", "EN_YEAR_MONTH_DAY"); patterns.put("yyyy-MM", "EN_YEAR_MONTH"); patterns.put("yyyy", "EN_YEAR"); patterns.put("HH:mm:ss", "EN_HOUR_MIN_SEC"); patterns.put("HH:mm", "EN_HOUR_MIN"); patterns.put("yyyy年MM月dd日 HH时mm分ss秒", "CN_YEAR_MONTH_DAY_HOUR_MIN_SEC"); patterns.put("yyyy年MM月dd日 HH时mm分", "CN_YEAR_MONTH_DAY_HOUR_MIN"); patterns.put("yyyy年MM月dd日 HH时", "CN_YEAR_MONTH_DAY_HOUR"); patterns.put("yyyy年MM月dd日", "CN_YEAR_MONTH_DAY"); patterns.put("yyyy年MM月", "CN_YEAR_MONTH"); patterns.put("yyyy年", "CN_YEAR"); patterns.put("HH时mm分ss秒", "CN_HOUR_MIN_SEC"); patterns.put("HH时mm分", "CN_HOUR_MIN"); } /** * * parse: * 将字符串按指定模板转化为日期 * @param date * @param pettern(缺省为"yyyy-MM-dd") * @return Date * @throws * @author chipeng * @since Ver 1.1 * @Date 2013-6-13 下午08:39:14 */ public static Date parse(String date,String pettern){ Date retVal = null; if(date==null||"".equals(date)){ return retVal; } if (pettern==null||"".equals(pettern.trim())) { pettern=DateUtil.EN_YEAR_MONTH_DAY; } try { retVal=new SimpleDateFormat(pettern).parse(date); } catch (ParseException e) { } return retVal; } public static String formatDate(Date date,String pettern){ if(date==null){ return ""; } if (pettern==null||"".equals(pettern.trim())) { pettern=DateUtil.EN_YEAR_MONTH_DAY; } return new SimpleDateFormat(pettern).format(date); } /** * * formatDate: * 将日期格式化成"yyyy-MM-dd"格式 * @param date * @return String * @throws * @author chipeng * @since Ver 1.1 * @Date 2013-6-11 下午10:33:07 */ public static String formatDate(Date date){ if(date==null){ return ""; } return DateUtil.formatDate(date,DateUtil.EN_YEAR_MONTH_DAY); } /** * * distanceDate: 计算两个时间相差的“年”或“天”或“日” * * @param startDate * @param endDate * @param type * :DISTANCE_YEAR=0;DISTANCE_MONTH=1;DISTANCE_DAY=2; * @return int * @throws * @author cp * @since Ver 1.1 * @Date 2011-7-28 上午04:55:09 */ public static int distanceDate(Date startDate, Date endDate, int type) { // TODO Auto-generated method stub int ret = 0; Calendar date1 = new GregorianCalendar(); Calendar date2 = new GregorianCalendar(); boolean isPositive = true; if (null == startDate || null == endDate) { return ret; } if (startDate.before(endDate)) { date1.setTime(startDate); date2.setTime(endDate); } else { date1.setTime(endDate); date2.setTime(startDate); isPositive = false; } date1.set(Calendar.HOUR_OF_DAY, 0); date1.set(Calendar.MINUTE, 0); date1.set(Calendar.SECOND, 0); date1.set(Calendar.MILLISECOND, 0); date2.set(Calendar.HOUR_OF_DAY, 0); date2.set(Calendar.MINUTE, 0); date2.set(Calendar.SECOND, 0); date2.set(Calendar.MILLISECOND, 0); while (date1.before(date2)) { if (type == DateUtil.DISTANCE_YEAR) { date1.add(Calendar.YEAR, 1); } else if (type == DateUtil.DISTANCE_MONTH) { date1.add(Calendar.MONTH, 1); } else { date1.add(Calendar.DATE, 1); } if (!date1.after(date2)) ret++; } if (!isPositive) ret = -ret; return ret; } /** * 获取当前日期所在月份的第一天所在日期0点0分0秒 */ public static Date getFirstDateInMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DATE, 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(); } /** * 获取上月日期所在月份的第一天所在日期0点0分0秒 * @param date 当前日期 * @return */ public static Date getFirstDateInLastMonth(Date date) { if(date==null){ date = new Date(); } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, -1); calendar.set(Calendar.DATE, 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(); } public static Date getFirstDateInLastMonth() { return getFirstDateInLastMonth(null); } /** * 获取上月日期所在月份的第一天所在日期0点0分0秒 * @param date 当前日期 * @return */ public static Date getLastDateInLastMonth(Date date) { if(date==null){ date = new Date(); } Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.DATE, 1); 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); return calendar.getTime(); } public static Date getLastDateInLastMonth() { return getLastDateInLastMonth(null); } /** * 获取当前日期所在月份的最后一天所在日期23点59分59秒 */ public static Date getLastDateInMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.set(Calendar.DAY_OF_MONTH, lastDay); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MILLISECOND, 999); return calendar.getTime(); } /** * * getFirstDateInMonth: * 获得某月第一天 * @param year * @param month (0代表1月) * @return Date * @throws * @author cp * @since Ver 1.1 * @Date 2011-10-22 下午06:21:49 */ public static Date getFirstDateInMonth(int year, int month) { Calendar c = Calendar.getInstance(); c.set(Calendar.DAY_OF_MONTH, 1); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month); c.set(Calendar.HOUR, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); return c.getTime(); } /** * 当年第一天 * @return */ public static Date getFirstDayOfCurrentYear() { Calendar c = Calendar.getInstance(); c.set(Calendar.DAY_OF_MONTH, 1); c.set(Calendar.MONTH, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); return c.getTime(); } /** * * getLastDateInMonth: * 获得某月最后一天 * @param year * @param month (0代表1月) * @return Date * @throws * @author cp * @since Ver 1.1 * @Date 2011-10-22 下午06:23:51 */ public static Date getLastDateInMonth(int year, int month) { Calendar c = Calendar.getInstance(); c.set(Calendar.DAY_OF_MONTH, 1); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month); int maxDayInMonth = c.getActualMaximum(Calendar.DAY_OF_MONTH); c.set(Calendar.DAY_OF_MONTH, maxDayInMonth); c.set(Calendar.HOUR_OF_DAY, 23); c.set(Calendar.MINUTE, 59); c.set(Calendar.SECOND, 59); c.set(Calendar.MILLISECOND, 999); return c.getTime(); } /** * getBeginDateOfDate:将给定时间设置成0时0分0秒返回 TODO * * @param dateValue * @return Date * @throws * @author cp * @since Ver 1.1 * @Date 2010-12-20 下午06:01:52 */ public static Date getBeginDateOfDate(Date dateValue) { Calendar cal = GregorianCalendar.getInstance(); cal.setTime(dateValue); cal.set(Calendar.AM_PM, Calendar.AM); 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(); } /** * getEndDateOfDate:将给定时间设置成23时59分59秒返回 TODO * * @param dateValue * @return Date * @throws * @author cp * @since Ver 1.1 * @Date 2010-12-20 下午06:02:19 */ public static Date getEndDateOfDate(Date dateValue) { Calendar cal = GregorianCalendar.getInstance(); cal.setTime(dateValue); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); cal.set(Calendar.MILLISECOND, 999); return cal.getTime(); } /** * 求两个时间的毫秒差 * @param start * @param end * @return */ public static long timeDiff(Date start,Date end){ return end.getTime() - start.getTime(); } /** * 计算两个日期之间相差的天数 * @param start * @param end * @return * @author: lihua * Create On:2013-6-24 下午04:38:53 * Modify On: * @Description */ public static Double timeDayDiff(Date start,Date end){ return timeDiff(start,end)*1d/(1000*60*60*24); } /** * 返回时间范围以内的每天的Date集合 * @param start * @param end * @return */ public static List getDateList(Date start,Date end){ List result = new ArrayList(); Calendar cal = Calendar.getInstance(); cal.setTime(start); while(cal.getTime().getTime()<=end.getTime()){ result.add(cal.getTime()); cal.add(Calendar.DAY_OF_MONTH, 1); } return result; } public static List getYearList(Date start,Date end){ List result = new ArrayList(); Calendar cal = Calendar.getInstance(); cal.setTime(start); while(cal.getTime().getTime()<=end.getTime()){ result.add(DateUtil.getFirstDayOfYear(cal.getTime())); cal.add(Calendar.YEAR, 1); } return result; } /** * 获取给定日期所在年第一天 * @param time * @return */ public static Date getFirstDayOfYear(Date time) { Calendar c = Calendar.getInstance(); c.setTime(time); c.set(Calendar.DAY_OF_MONTH, 1); c.set(Calendar.MONTH, 0); c.set(Calendar.HOUR_OF_DAY,0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); return c.getTime(); } /** * 获取给定日期所在年最后一天 * @param time * @return */ public static Date getLastDayOfYear(Date time) { Calendar c = Calendar.getInstance(); c.setTime(time); c.set(Calendar.DAY_OF_MONTH, 1); c.set(Calendar.MONTH, 0); c.set(Calendar.HOUR_OF_DAY,0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); c.add(Calendar.YEAR, 1); c.add(Calendar.DAY_OF_MONTH, -1); return c.getTime(); } /** * 获取次日零点时间 * @return */ public static Date getMiddleNightTime(){ Calendar cal = Calendar.getInstance(); cal.add(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return cal.getTime(); } /** * 昨天零时零分零秒 * @return */ public synchronized static Date yesterday(){ return yesterday(new Date()); } /** * date的昨天的零时零分零秒 * @param date * @return */ public synchronized static Date yesterday(Date date){ Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(Calendar.DAY_OF_MONTH, -1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return cal.getTime(); } /** * 判断某个日期是否在给定的日期范围之内 * @param date * @param start * @param end * @return */ public synchronized static boolean between(Date date,Date start,Date end){ return date.compareTo(start)>=0 && date.compareTo(end)<=0; } /** * 在日期start的field上增加value个单位值 * @param start * @param field * @param value * @return */ public static Date datePlus(Date start,int field,int value){ Calendar cal = Calendar.getInstance(); cal.setTime(start); cal.add(field, value); return cal.getTime(); } /** * 判断是否为同一天 * @param date1 * @param date2 * @return */ public static final boolean isSameDay(Date date1, Date date2) { boolean ret = false; if( null == date1 || null == date2 ){ return false; } if (date1.getYear() == date2.getYear() && date1.getMonth() == date2.getMonth() && date1.getDate() == date2.getDate()) ret = true; return ret; } /** * * mergeTime: 合并多个时间对 * * @param dateList * @param deviation 允许的偏差(毫秒数) * @return List 合并后的时间列表 * @throws * */ public static List mergeTime(List dateList, long deviation) { List mergeDateList = new ArrayList(); Iterator iterDateList = dateList.iterator(); Date[] mergeDate = null; Date[] checkDate = null; while (dateList.size() >= 1) { mergeDate = (Date[]) dateList.remove(0); iterDateList = dateList.iterator(); while (iterDateList.hasNext()) { checkDate = (Date[]) iterDateList.next(); if ((!(mergeDate[0].after(checkDate[1])) && !(mergeDate[1].before(checkDate[0]))) ||(checkDate[1].before(mergeDate[0])&&(checkDate[1].getTime()+deviation)>=mergeDate[0].getTime()) ||(mergeDate[1].before(checkDate[0])&&(mergeDate[1].getTime()+deviation)>=checkDate[0].getTime())) { mergeDate[0] = mergeDate[0].before(checkDate[0]) ? mergeDate[0] : checkDate[0]; mergeDate[1] = mergeDate[1].after(checkDate[1]) ? mergeDate[1] : checkDate[1]; iterDateList.remove(); iterDateList = dateList.iterator(); } } mergeDateList.add(mergeDate); } return mergeDateList; } /** * 两个时间段交集(毫秒) * @param dateTimeSpanBegin * @param dateTimeSpanEnd * @param dateBegin * @param dateEnd * @author cp * @since Ver 1.1 * @Date 2014-6-29 * @return */ public static long getMillisecondsInSpan(Date dateTimeSpanBegin, Date dateTimeSpanEnd, Date dateBegin, Date dateEnd) { long lDifference = 0; if (dateBegin.before(dateTimeSpanBegin) && (dateEnd.before(dateTimeSpanBegin)||dateEnd.equals(dateTimeSpanBegin))) { } else if ((dateBegin.after(dateTimeSpanEnd)||dateBegin.equals(dateTimeSpanEnd)) && dateEnd.after(dateTimeSpanEnd)) { } else if ((dateBegin.before(dateTimeSpanBegin)||dateBegin.equals(dateTimeSpanBegin)) && (dateEnd.after(dateTimeSpanEnd)||dateEnd.equals(dateTimeSpanEnd))) { lDifference = dateTimeSpanEnd.getTime() - dateTimeSpanBegin.getTime(); } else if ((dateBegin.after(dateTimeSpanBegin)||dateBegin.equals(dateTimeSpanBegin)) && (dateEnd.before(dateTimeSpanEnd)||dateEnd.equals(dateTimeSpanEnd))) { lDifference = dateEnd.getTime() - dateBegin.getTime(); } else if (dateBegin.before(dateTimeSpanBegin) && dateEnd.after(dateTimeSpanBegin)) { lDifference = dateEnd.getTime() - dateTimeSpanBegin.getTime(); } else if (dateBegin.before(dateTimeSpanEnd) && dateEnd.after(dateTimeSpanEnd)) { lDifference = dateTimeSpanEnd.getTime() - dateBegin.getTime(); } return lDifference; } /** * 将字符串转换成date类型 * 例:09:00 -》 2014-08-06 09:00:00 * @param str * @return */ public static Date timeStr2TodayDate(String str){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { str = sdf.format(new Date()) +" "+ str +":00"; return sdf1.parse(str); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 将字符串转换成date类型 * 例:09:00 -》 2014-08-06 09:00:00 * @param str * @return */ public static Date timeStr2Date(String str,Date today){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { str = sdf.format(today) +" "+ str +":00"; return sdf1.parse(str); } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 当前季度的开始时间,即2012-01-1 00:00:00 * * @return */ public static Date getCurrentQuarterStartTime() { Calendar c = Calendar.getInstance(); int currentMonth = c.get(Calendar.MONTH) + 1; Date now = null; try { if (currentMonth >= 1 && currentMonth <= 3) c.set(Calendar.MONTH, 0); else if (currentMonth >= 4 && currentMonth <= 6) c.set(Calendar.MONTH, 3); else if (currentMonth >= 7 && currentMonth <= 9) c.set(Calendar.MONTH, 6); else if (currentMonth >= 10 && currentMonth <= 12) c.set(Calendar.MONTH, 9); c.set(Calendar.DATE, 1); c.set(Calendar.HOUR, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); now = c.getTime(); } catch (Exception e) { e.printStackTrace(); } return now; } /** * 当前季度的结束时间 * @return */ public static Date getCurrentQuarterEndTime() { Calendar c = Calendar.getInstance(); int currentMonth = c.get(Calendar.MONTH) + 1; Date now = null; try { if (currentMonth >= 1 && currentMonth <= 3) { c.set(Calendar.MONTH, 2); c.set(Calendar.DATE, 31); } else if (currentMonth >= 4 && currentMonth <= 6) { c.set(Calendar.MONTH, 5); c.set(Calendar.DATE, 30); } else if (currentMonth >= 7 && currentMonth <= 9) { c.set(Calendar.MONTH, 8); c.set(Calendar.DATE, 30); } else if (currentMonth >= 10 && currentMonth <= 12) { c.set(Calendar.MONTH, 11); c.set(Calendar.DATE, 31); } c.set(Calendar.HOUR, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); c.set(Calendar.MILLISECOND, 0); now = c.getTime(); } catch (Exception e) { e.printStackTrace(); } return now; } /** * 通过网络获取北京时间 * @return * 北京时间或者本地系统时间 * @author: zuowg * Create On:2014年5月9日 下午2:27:57 * Modify On: * @throws RequestBJTimeException * @Description */ public final static Date getBjTime(){ Date date = null; URLConnection uc; try { URL url=new URL("http://221.130.182.180");//取得资源对象 uc = url.openConnection(); uc.connect(); //发出连接 long ld=uc.getDate(); //取得网站日期时间 date=new Date(ld); //转换为标准时间对象 } catch (IOException e) { // throw new RequestBJTimeException(); } return date; } /** * 将总的秒数转换为时分秒的格式 * @param totalSecond * 总的秒数 * @return * 时分秒时间格式 * @author: zuowg * Create On:2014年5月13日 上午11:48:37 * Modify On: * @Description */ public final static String secondToTime(long totalSecond){ String timeStr = null; long date = 0; long hour = 0; long minute = 0; long second = 0; if (totalSecond <= 0) return "0秒"; else { minute = totalSecond / 60; if (minute < 60) { second = totalSecond % 60; timeStr = unitFormat(minute) + "分钟"; //+ unitFormat(second) + "秒"; } else { hour = minute / 60; if (hour < 24) { hour = hour % 24; minute = minute % 60; second = totalSecond - hour * 3600 - minute * 60; timeStr = unitFormat(hour) + "小时" + unitFormat(minute) + "分钟";// + unitFormat(second) + "秒"; } else { date = hour / 24; hour = hour % 24; minute = minute % 60; second = totalSecond - date * 24 - hour * 3600 - minute * 60; timeStr = unitFormat(hour) + "天" + unitFormat(hour) + "小时" + unitFormat(minute) + "分钟";// + unitFormat(second) + "秒"; } } } return timeStr; } private static String unitFormat(long time) { String retStr = null; if (time >= 0 && time < 10) //retStr = "0" + Long.toString(time); wangfs 2017-07-07 更改 retStr = Long.toString(time); else retStr = "" + time; return retStr; } public static void main(String[] args) { String str = DateUtil.secondToTime(7000); System.out.println(str); } }