时间工具 java
2016-01-06 20:22
405 查看
package com.cin.base.util; import java.text.DateFormat; 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.List; public class DateUtil { public static String formatDateTime(Date date,String format){ if (date==null) return ""; if (format==null) return date.toString(); DateFormat df = new SimpleDateFormat(format); return df.format(date); } public static String formatY0M0D(Date date){ return date==null?"":formatDateTime(date,"yyyyMMdd"); } public static String formatYMD(Date date){ return date==null?"":formatDateTime(date,"yyyy-MM-dd"); } public static String formatYMDHM(Date date){ return date==null?"":formatDateTime(date,"yyyy-MM-dd HH:mm"); } public static String formatDateTimeByDate(Date date){ return date==null?"":formatDateTime(date,"yyyy-MM-dd HH:mm:ss"); } public static String formatTimeStampByDate(Date date){ return date==null?"":formatDateTime(date,"yyyy-MM-dd HH:mm:ss.SSS"); } public static String formatTimeStampSByDate(Date date){ return date==null?"":formatDateTime(date,"yyyy-MM-dd HH:mm:ss.S"); } public static boolean showNew(Date time){ if (time==null) return false; return DateUtil.addDays(time,3).compareTo(new Date())>=0; } public static Date addDays(Date srcDate, int addDays) { return getNextDayFromCurrent(srcDate,addDays); } public static Date addMinutes(Date srcDate, int minutes) { Calendar cal = Calendar.getInstance(); cal.setTime(srcDate); cal.add(Calendar.MINUTE, minutes); return cal.getTime(); } public static Date getNextDayFromCurrent(Date currDate,int i){ GregorianCalendar gc = new GregorianCalendar(); gc.setTime(currDate); gc.add(GregorianCalendar.DATE, i); return gc.getTime(); } public static Date getNextMonthFromCurrent(Date current,int i){ GregorianCalendar gc = new GregorianCalendar(); gc.setTime(current); gc.add(GregorianCalendar.MONTH, i); return gc.getTime(); } public static Date getNextWeekFromCurrent(Date current,int i){ GregorianCalendar gc = new GregorianCalendar(); gc.setTime(current); gc.add(GregorianCalendar.WEEK_OF_YEAR, i); return gc.getTime(); } public static Date getNextYearFromCurrent(Date current,int i){ GregorianCalendar gc = new GregorianCalendar(); gc.setTime(current); gc.add(GregorianCalendar.YEAR, i); return gc.getTime(); } public static Date getNextHourFromCurrent(Date current,int i){ GregorianCalendar gc = new GregorianCalendar(); gc.setTime(current); gc.add(GregorianCalendar.HOUR, i); return gc.getTime(); } public static int getCurrDay(){ Calendar now = Calendar.getInstance(); return now.get(Calendar.DAY_OF_WEEK); } public static Date StrToDate(String str,String format){ if (str == null || "".equals(str)) { return null; } try{ if(format == null || "".equals(format)) format = "yyyy-MM-dd"; java.text.SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.parse(str); }catch(ParseException pe){ pe.printStackTrace(); return null; } } public static Date StrToDate(String str){ return StrToDate(str,"yyyy-MM-dd"); } public static long getNumOfDays(String date1,String date2){ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Date d1; try { d1 = df.parse(date1); Date d2 = df.parse(date2); long diff = Math.abs(d2.getTime()-d1.getTime()); return (long)(diff/(1000*60*60*24)); } catch (ParseException e) { e.printStackTrace(); } return 0; } public static boolean compare(Date d1,Date d2) { if((d2.getTime()-d1.getTime())>600000l){ return true; } return false; } @SuppressWarnings("deprecation") public static String getTheDay(Date d){ return "日一二三四五六".charAt(d.getDay())+""; } public static String [] weekDate(int year ,int week){ if(week<1||week>52)return null; String s [] = new String [2]; Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.WEEK_OF_YEAR, week); c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY); s[0] = formatYMD(c.getTime()); c.add(Calendar.DATE, 6); s[1] = formatYMD(c.getTime()); return s; } public static String [] monthDate(int year ,int month){ if(month<1||month>12) return null; String s [] = new String [2]; Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, month-1); c.set(Calendar.DAY_OF_MONTH, 1); s[0] = formatYMD(c.getTime()); c.add(Calendar.MONTH, 1); c.add(Calendar.DATE, -1); s[1] = formatYMD(c.getTime()); return s; } public static String [] seasonDate(int year ,int season){ if(season<1||season>4)return null; String y= String.valueOf(year); String []s = new String [2]; switch(season){ case 1 : s[0]= y+"-01-01";s[1]= y+"-03-31";break; case 2 : s[0]= y+"-04-01";s[1]= y+"-06-30";break; case 3 : s[0]= y+"-07-01";s[1]= y+"-09-30";break; case 4 : s[0]= y+"-10-01";s[1]= y+"-12-31";break; } return s; } public static Date getFirstDayOfWeek(Date someDay) { Calendar calendar = Calendar.getInstance(); calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.setTime(someDay); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.DAY_OF_WEEK,Calendar.MONDAY); return calendar.getTime(); } public static Date getLastDatetimeOfWeek(Date someDay) { Calendar calendar = Calendar.getInstance(); calendar.setFirstDayOfWeek(Calendar.MONDAY); calendar.setTime(someDay); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); calendar.set(Calendar.MILLISECOND, 999); calendar.set(Calendar.DAY_OF_WEEK,Calendar.SUNDAY); return calendar.getTime(); } public static Date getFirstDayOfMonth(Date someDay) { Calendar calendar = Calendar.getInstance(); calendar.setTime(someDay); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.DAY_OF_MONTH,1); return calendar.getTime(); } public static Date getNextDayCurrDay(Date currDate,int i){ GregorianCalendar gc = new GregorianCalendar(); gc.setTime(currDate); gc.add(GregorianCalendar.DATE, i); return gc.getTime(); } public static Date getBeginOfDay(Date someDay) { Calendar calendar = Calendar.getInstance(); calendar.setTime(someDay); 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[] getDaysInInterval(Date beginDate, Date endDate) { List days = new ArrayList(); //日期回滚一天,也就是最后一天 int dateLength = (int) ((endDate.getTime()-beginDate.getTime())/(24*60*60*1000)); ; GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(beginDate); for (int i = 0; i <= dateLength; i++) { calendar.add(GregorianCalendar.DATE, 0 != i ? 1 : 0); days.add(calendar.getTime()); } return days.toArray(new Date[days.size()]); } public static Date[] getDaysInWeek(Date someDay) { List daysInWeek = new ArrayList(); Date firstDay = getFirstDayOfWeek(someDay); GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(firstDay); for (int i = 0; i < 7; i++) { calendar.add(GregorianCalendar.DAY_OF_WEEK, 0 != i ? 1 : 0); daysInWeek.add(calendar.getTime()); } return daysInWeek.toArray(new Date[daysInWeek.size()]); } public static Date[] getSevernDaysPrior(Date someDay) { List daysInWeek = new ArrayList(); GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(someDay); calendar.add(GregorianCalendar.DATE, -7); calendar.setTime(calendar.getTime()); for (int i = 0; i < 7; i++) { calendar.add(GregorianCalendar.DATE, 1); daysInWeek.add(calendar.getTime()); } return daysInWeek.toArray(new Date[daysInWeek.size()]); } public static Date[] getDaysInMonth(Date someDay) { List daysInMonth = new ArrayList(); Date firstDay = getFirstDayOfMonth(someDay); GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(firstDay); for (int i = 0; i < getDaysCountOfMonth(someDay); i++) { calendar.add(GregorianCalendar.DAY_OF_MONTH, 0 != i ? 1 : 0); daysInMonth.add(calendar.getTime()); } return daysInMonth.toArray(new Date[daysInMonth.size()]); } public static Date[] splitDayByHour(Date someDay) { List dates = new ArrayList(); Date begin = getBeginOfDay(someDay); GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(begin); for (int i = 0; i < 24; i++) { calendar.add(GregorianCalendar.HOUR_OF_DAY, 0 != i ? 1 : 0); dates.add(calendar.getTime()); } return dates.toArray(new Date[dates.size()]); } public static Date[] splitDayByThreeHour(Date someDay) { List dates = new ArrayList(); Date begin = getBeginOfDay(someDay); GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(begin); for (int i = 0; i < 8; i++) { calendar.add(GregorianCalendar.HOUR_OF_DAY, 0 != i ? 3 : 0); dates.add(calendar.getTime()); } return dates.toArray(new Date[dates.size()]); } public static Date getFirstDayOfYear(Date someDay) { Calendar calendar = Calendar.getInstance(); calendar.setTime(someDay); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.DAY_OF_YEAR, 1); return calendar.getTime(); } public static Date[] splitYearByMonth(Date someDay) { List dates = new ArrayList(); Date fristDay = getFirstDayOfYear(someDay); GregorianCalendar calendar = new GregorianCalendar(); calendar.setTime(fristDay); for (int i = 0; i < 12; i++) { calendar.add(GregorianCalendar.MONTH, 0 != i ? 1 : 0); dates.add(calendar.getTime()); } return dates.toArray(new Date[dates.size()]); } public static int getDaysCountOfMonth(Date someDay) { Calendar calendar = Calendar.getInstance(); calendar.setTime(someDay); //把日期设置为当月第一天 calendar.set(Calendar.DAY_OF_MONTH, 1); //日期回滚一天,也就是最后一天 calendar.roll(Calendar.DAY_OF_MONTH, -1); return calendar.get(Calendar.DATE); } public static Date getLastDayOfMonth(Date someDay) { Calendar calendar = Calendar.getInstance(); calendar.setTime(someDay); //把日期设置为当月第一天 calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) + 1); calendar.set(Calendar.DATE, 1); //日期回滚一天,也就是最后一天 calendar.add(Calendar.DATE, -1); DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(format.format(calendar.getTime())); return calendar.getTime(); } public static int getDaysBetween(Date start,Date end){ long diff = Math.abs(end.getTime()-start.getTime()); return (int)(diff/(1000*60*60*24)); } public static Date addHours(Date srcDate, int hours) { Calendar cal = Calendar.getInstance(); cal.setTime(srcDate); cal.add(Calendar.HOUR, hours); return cal.getTime(); } public static Date addWeeks(Date srcDate, int weeks) { Calendar cal = Calendar.getInstance(); cal.setTime(srcDate); cal.add(Calendar.WEEK_OF_MONTH, weeks); return cal.getTime(); } public static Date addMonth(Date srcDate, int month) { Calendar cal = Calendar.getInstance(); cal.setTime(srcDate); cal.add(Calendar.MONTH, month); return cal.getTime(); } public static Date[] getDateArrays(Date start, Date end, String type) { List dates = new ArrayList(); Calendar calendar = Calendar.getInstance(); calendar.setTime(start); // Date tmpDate = calendar.getTime(); // long endTime = end.getTime(); Date firstDay = null; Date lastDay = null; if(type.equals("HOUR")){ int days = getDaysBetween(start,end); int average = days*24/12; firstDay = getBeginOfDay(start); for(int i=0;i<=12;i++){ dates.add(addHours(firstDay,average*i)); } }else if(type.equals("DAY")){ int days = getDaysBetween(start,end) + 1; for(int i=0;i dates.add(addDays(start,i)); } }else if(type.equals("WEEK")){ firstDay = getFirstDayOfWeek(start); lastDay = getFirstDayOfWeek(end); dates.add(start); while(firstDay.before(lastDay)){ firstDay = addDays(firstDay,7); dates.add(firstDay); } if(lastDay.before(end)){ dates.add(end); }else{ dates.add(lastDay); } }else if(type.equals("MONTH")){ firstDay = getFirstDayOfMonth(start); lastDay = getFirstDayOfMonth(end); dates.add(start); while(firstDay.before(lastDay)){ firstDay = addMonth(firstDay,1); dates.add(firstDay); } if(lastDay.before(end)){ dates.add(end); }else{ dates.add(lastDay); } } // while (tmpDate.before(end) || tmpDate.getTime() == endTime) { // ret.add(calendar.getTime()); // calendar.add(Calendar.DAY_OF_MONTH, 1); // tmpDate = calendar.getTime(); // } // Date[] dates = new Date[ret.size()]; // return (Date[]) ret.toArray(dates); return dates.toArray(new Date[dates.size()]); } public static Date getEndOfDay(Date someDay) { Calendar calendar = Calendar.getInstance(); calendar.setTime(someDay); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); return calendar.getTime(); } public static List getDatesBetween(Date start,Date end){ List dateList = new ArrayList(); int days = getDaysBetween(start, end); for (int i = 0; i <= days; i++) { dateList.add(addDays(start, i)); } return dateList; } public static List> getDateArrays(Date start, Date end) { List> weeks = new ArrayList>(); Calendar c_begin = Calendar.getInstance(); c_begin.setTime(start); Calendar c_end = Calendar.getInstance(); c_end.setTime(end); int count = 1; c_end.add(Calendar.DAY_OF_YEAR, 1); //结束日期下滚一天是为了包含最后一天 List week = new ArrayList(); while(c_begin.before(c_end)){ week.add(c_begin.getTime()); if(c_begin.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY){ count++; weeks.add(week); week = new ArrayList(); } c_begin.add(Calendar.DAY_OF_YEAR, 1); } return weeks; } public static List> getMonthDateArrays(Date start, Date end) { List> months = new ArrayList>(); Date firstDayOfBeginTimeMonth = DateUtil.getFirstDayOfMonth(end);//今天所在月的第一天 String firstDayOfBeginTimeMonthStr = DateUtil.formatDateTime(firstDayOfBeginTimeMonth, "yyyy-MM-dd"); String[] arr1 = firstDayOfBeginTimeMonthStr.split("-"); String yearStr1 = arr1[0]; int year1 = 0; if(yearStr1 != null){ year1 = Integer.parseInt(yearStr1); } String monthStr1 = arr1[1]; int month1 = 0; if(monthStr1 != null){ month1 = Integer.parseInt(monthStr1); } Date firstDayOfCreateTimeMonth = DateUtil.getFirstDayOfMonth(start);//获取创建用户所在月的第一天 String firstDayOfCreateTimeMonthStr = DateUtil.formatDateTime(firstDayOfCreateTimeMonth, "yyyy-MM-dd"); String[] arr2 = firstDayOfCreateTimeMonthStr.split("-"); String yearStr2 = arr2[0]; int year2 = 0; if(yearStr2 != null){ year2 = Integer.parseInt(yearStr2); } String monthStr2 = arr2[1]; int month2 = 0; if(monthStr2 != null){ month2 = Integer.parseInt(monthStr2); } if(year2 == year1){//用户创建时间和当前时间在同一年 for(int i = month2;i < (month1+1);i++){ List dateList = new ArrayList(); String[] s = DateUtil.monthDate(year2, i);//获取得某年的第几月的起始日期和结束日期-[0]起始日期 [1]结束日期 for(int index = 0;index Date date = new Date(); date = StrToDate(s[index]); if(i == month2 && index == 0){ dateList.add(start); }else if(i == month1 && index == 1){ dateList.add(end); } else { dateList.add(date); } } months.add(dateList); } }else { if(year2 < year1){//用户创建时间和当前时间不在同一年,如2013--2014 int num = year1 - year2; for(int i = month2;i < 13;i++){ List dateList = new ArrayList(); String[] s = DateUtil.monthDate(year2, i);//获取得某年的第几月的起始日期和结束日期-[0]起始日期 [1]结束日期 for(int index = 0;index Date date = new Date(); date = StrToDate(s[index]); if(i == month2 && index == 0){ dateList.add(start); }else if(i == month1 && index == 1){ dateList.add(end); } else { dateList.add(date); } } months.add(dateList); } if(num > 1){ for(int i = year2+1 ;i < year1;i++){ for(int j = 1;j < 13;j++){ List dateList = new ArrayList(); String[] s = DateUtil.monthDate(i, j);//获取得某年的第几月的起始日期和结束日期-[0]起始日期 [1]结束日期 for(int index = 0;index Date date = new Date(); date = StrToDate(s[index]); if(date.getTime()>start.getTime() && date.getTime() dateList.add(date); } } months.add(dateList); } } } for(int i = 1;i < month1+1;i++){ List dateList = new ArrayList(); String[] s = DateUtil.monthDate(year1, i);//获取得某年的第几月的起始日期和结束日期-[0]起始日期 [1]结束日期 for(int index = 0;index Date date = new Date(); date = StrToDate(s[index]); if(i == month2 && index == 0){ dateList.add(start); }else if(i == month1 && index == 1){ dateList.add(end); } else { dateList.add(date); } } months.add(dateList); } } } return months; } }
相关文章推荐
- springMvc 拦截器
- java jar war 打包
- java+selenium Q&A
- Java中的抽象类与接口
- spring注解
- Elasticsearch源码加载到eclipse调试
- Spring-web源码解析之Initializer
- Java 字符串与数值、数组之间的转化
- 关于 struts2-json-plugin 报错
- swing/组件 java(三)
- 关于Java Project 打jar对配置文件以及jar的引用
- JAVA 参数传递 小记一则
- Java基础(下)
- 高斯消元算法实现(Java)
- Java基础之枚举妙用
- Java基础之枚举妙用
- Java基础之枚举妙用
- Java基础之枚举妙用
- Spring MVC @ResponseBody 中文乱码解决
- Spring环境下MyBatis支持多个Datasource参考实现