import java.sql.Timestamp; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.HashMap; import java.util.Map;
import org.apache.commons.lang.time.DateUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory;
import com.hurong.core.Constants;
public class DateUtil { private static final Log logger = LogFactory.getLog(DateUtil.class);
/** * 设置当前时间为当天的最初时间(即00时00分00秒) * * @param cal * @return */ public static Calendar setStartDay(Calendar cal) { cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return cal; }
public static Calendar setEndDay(Calendar cal) { cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); return cal; }
/** * 把源日历的年月日设置到目标日历对象中 * @param destCal * @param sourceCal */ public static void copyYearMonthDay(Calendar destCal,Calendar sourceCal){ destCal.set(Calendar.YEAR, sourceCal.get(Calendar.YEAR)); destCal.set(Calendar.MONTH, sourceCal.get(Calendar.MONTH)); destCal.set(Calendar.DAY_OF_MONTH, sourceCal.get(Calendar.DAY_OF_MONTH)); }
/** * 格式化日期为 * * @return */ public static String formatEnDate(Date date) { SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
return sdf.format(date).replaceAll("上午", "AM").replaceAll("下午", "PM"); }
public static Date parseDate(String dateString) { Date date = null; try { date = DateUtils.parseDate(dateString, new String[]{Constants.DATE_FORMAT_FULL,Constants.DATE_FORMAT_YMD}); } catch (Exception ex) { logger.error("Pase the Date(" + dateString + ") occur errors:" + ex.getMessage()); } return date; }
public static String getDateAndTime() { Calendar calendar = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sdf.format(calendar.getTime());
}
public static String getYearAndMonth(){ Calendar calendar=Calendar.getInstance(); SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyyMM"); return simpleDateFormat.format(calendar.getTime()); }
public final static Timestamp stringToTS(String time) { SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Timestamp ts = null; try { ts = new Timestamp(sf.parse(time).getTime()); } catch (ParseException e) { e.printStackTrace(); } return ts ; }
public final static Timestamp stringToTsDate(String time){ SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); Timestamp ts = null; try { ts = new Timestamp(sf.parse(time).getTime()); } catch (ParseException e) { e.printStackTrace(); } return ts ; }
/** * @function 得到现在的时间 yyyy-MM-dd HH:mm:ss * * @auther jiangwanyu * * @return String */ public final static String getNowDateTime(){
Date nowDate = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return sf.format(nowDate); }
/** * @function 自定义 日期格式 * @param dateFormat * @return */ public final static String getNowDateTime(String dateFormat){ Date nowDate = new Date();
SimpleDateFormat sf = null; try { sf = new SimpleDateFormat(dateFormat); } catch (Exception e) { e.printStackTrace(); return ""; }
return sf.format(nowDate); }
/** * @funciton 得到 Timestamp 类型的nowDateTime * * @author credit004 * * @return Timestamp */ public final static Timestamp getNowDateTimeTs(){ return stringToTS(getNowDateTime()); }
public final static Timestamp getNowDayTimeTs(){ return stringToTsDate(getNowDateTime()); }
/** * @funciton 节点任务期限---XXXX年XX月XX日 星期X * @param dayLimit * @return */ public final static String getTaskTimeLimit(int dayLimit){
Date nowDate = new Date();
int mod = dayLimit % 5; int other = dayLimit / 5 * 7;
SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Calendar calendar = Calendar.getInstance(); calendar.setTime(nowDate);
/* * 判断双休日 jiang */ for (int i = 0; i < mod;) { calendar.add(Calendar.DATE, 1); switch (calendar.get(Calendar.DAY_OF_WEEK)) { case Calendar.SUNDAY: case Calendar.SATURDAY: break; default: i++; break; } } if (other > 0){ calendar.add(Calendar.DATE, other); }
// calendar.set(Calendar.DAY_OF_YEAR,calendar.get(Calendar.DAY_OF_YEAR) + dayLimit);
return sf.format(calendar.getTime()); }
/** * @funciton 节点任务期限---XXXX年XX月XX日 星期X ---放假天数【非双休人为放假 比如 春节 比如 十一】 * @param dayLimit * @return */ public final static String getTaskTimeLimit(int dayLimit, int holidays){
Date nowDate = new Date();
dayLimit = dayLimit+holidays;
SimpleDateFormat sf = new SimpleDateFormat("yyyy年MM月dd日 E"); Calendar calendar = Calendar.getInstance(); calendar.setTime(nowDate); calendar.set(Calendar.DAY_OF_YEAR,calendar.get(Calendar.DAY_OF_YEAR) + dayLimit);
return sf.format(calendar.getTime()); }
/** * @funciton 得到 (time)时间 后的第(months)个月 */ public final static Timestamp getNextTerm(Timestamp time, int months){
Calendar calendar = Calendar.getInstance();
calendar.setTime(time); calendar.add(Calendar.MONTH, months);
Timestamp timestamp = new Timestamp(calendar.getTime().getTime());
return timestamp; }
/**两个日期的 日期差 参数s1:被减数 参数s2 :减数*/ public final static int getSurplusDays(Timestamp s1, Timestamp s2){
Calendar c1 = Calendar.getInstance(); c1.setTime(s1); Calendar c2 = Calendar.getInstance(); c2.setTime(s2);
long diff = (c1.getTimeInMillis()-c2.getTimeInMillis())/(1000*60*60*24);
return ((Long)diff).intValue(); }
// DateFormat format=new SimpleDateFormat("yyyy-MM-dd"); // Calendar calendar=Calendar.getInstance(); // calendar.setTime(mdefSetting.getDate()); // calendar.add(Calendar.DAY_OF_MONTH,1); // mdefs.setName(format.format(calendar.getTime())+" 至 "+mdefSetting2.getDate());
/** * 在日期上加days天,得到新的日期 * @return */ public final static Date addDaysToDate(Date date,int days){ Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.DATE,days); return c.getTime(); } /** * @function 得到自定义 日期格式 * @param dateFormat * @return */ public final static String getFormatDateTime(Date date,String dateFormat){
SimpleDateFormat sf = null; try { sf = new SimpleDateFormat(dateFormat); } catch (Exception e) { e.printStackTrace(); return ""; }
return sf.format(date); }
/** * 在日期上加months月,得到新的日期 * @return */ public final static Date addMonthsToDate(Date date,int months){ Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.MONTH,months); return c.getTime(); }
/** * 在日期上加months月和日,得到新的日期 * @return */ public final static Date addMonthsToDate(Date date,int months,int days){ Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.MONTH,months); c.add(Calendar.DATE,days); // c.roll(Calendar.DATE, days); return c.getTime(); }
/** * 计算两日期之间相隔月份和天数 * @return */ public static Map<Integer, Integer> getMonthAndDaysBetweenDate(String date1,String date2){ Map<Integer, Integer> map=new HashMap(); SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd"); Date d1 = null; try { d1 = sd.parse(date1); } catch (ParseException e) { e.printStackTrace(); } Date d2=null; try { d2 = sd.parse(date2); } catch (ParseException e) { e.printStackTrace(); } int months=0;//相差月份 int days=0; int y1=d1.getYear(); int y2=d2.getYear(); int dm1=d2.getMonth();//起始日期月份 int dm2=d2.getMonth();//结束日期月份 int dd1=d1.getDate(); //起始日期天 int dd2=d2.getDate(); //结束日期天 if(d1.getTime()<d2.getTime()){ months=d2.getMonth()-d1.getMonth()+(y2-y1)*12; if(dd2<dd1){ months=months-1; } System.out.println(getFormatDateTime(addMonthsToDate(DateUtil.parseDate(date1, "yyyy-MM-dd"),months),"yyyy-MM-dd")); days=getDaysBetweenDate(getFormatDateTime(addMonthsToDate(DateUtil.parseDate(date1, "yyyy-MM-dd"),months),"yyyy-MM-dd"),date2); map.put(1, months); map.put(2, days); } return map; } /** * 计算两日期之间相隔月份和天数,目前只有按月计算用到 2012.03.09 * @return */ public static Map<Integer, Integer> getMonthAndDaysBetweenDate2(String date1,String date2){ Map<Integer, Integer> map=new HashMap(); SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd"); Date d1 = null; try { d1 = sd.parse(date1); } catch (ParseException e) { e.printStackTrace(); } Date d2=null; try { d2 = sd.parse(date2); } catch (ParseException e) { e.printStackTrace(); } int months=0;//相差月份 int days=0; int y1=d1.getYear(); int y2=d2.getYear(); int dm1=d2.getMonth();//起始日期月份 int dm2=d2.getMonth();//结束日期月份 int dd1=d1.getDate(); //起始日期天 int dd2=d2.getDate(); //结束日期天 if(d1.getTime()<d2.getTime()){ months=d2.getMonth()-d1.getMonth()+(y2-y1)*12; if(dd2<dd1){ months=months-1; } if(dd2==dd1-1){ months = months +1; } System.out.println(getFormatDateTime(addMonthsToDate(DateUtil.parseDate(date1, "yyyy-MM-dd"),months),"yyyy-MM-dd")); days=getDaysBetweenDate2(getFormatDateTime(addMonthsToDate(DateUtil.parseDate(date1, "yyyy-MM-dd"),months),"yyyy-MM-dd"),date2); map.put(1, months); map.put(2, days); } return map; } /** * 计算两日期之间相隔月份和天数,目前只有按月计算用到 2012.03.09 * @return */ public static Map<Integer, Integer> getMonthAndDaysBetweenDate3(String date1,String date2){ Map<Integer, Integer> map=new HashMap(); SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd"); Date d1 = null; try { d1 = sd.parse(date1); } catch (ParseException e) { e.printStackTrace(); } Date d2=null; try { d2 = sd.parse(date2); } catch (ParseException e) { e.printStackTrace(); } int months=0;//相差月份 int days=0; int y1=d1.getYear(); int y2=d2.getYear(); int dm1=d2.getMonth();//起始日期月份 int dm2=d2.getMonth();//结束日期月份 int dd1=d1.getDate(); //起始日期天 int dd2=d2.getDate(); //结束日期天 if(d1.getTime()<d2.getTime()){ months=d2.getMonth()-d1.getMonth()+(y2-y1)*12; if(dd2<dd1){ months=months-1; } System.out.println(getFormatDateTime(addMonthsToDate(DateUtil.parseDate(date1, "yyyy-MM-dd"),months),"yyyy-MM-dd")); days=getDaysBetweenDate2(getFormatDateTime(addMonthsToDate(DateUtil.parseDate(date1, "yyyy-MM-dd"),months),"yyyy-MM-dd"),date2); if(dd2 == dd1){ days = 0; } map.put(1, months); map.put(2, days); } return map; }
/** * 计算两日期之间的天数 * @return */ public final static int getDaysBetweenDate(String date1,String date2){ SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd"); Date d1 = null; try { d1 = sd.parse(date1); } catch (ParseException e) { e.printStackTrace(); } Date d2=null; try { d2 = sd.parse(date2); } catch (ParseException e) { e.printStackTrace(); } Calendar c1 = Calendar.getInstance();
c1.setTime(d1); Calendar c2 = Calendar.getInstance(); c2.setTime(d2); long diff = (c2.getTimeInMillis()-c1.getTimeInMillis())/(1000*60*60*24); return ((Long)diff).intValue(); } /** * 计算两日期之间的天数,目前只有按月计算用到2012.03.09 * @return */ public final static int getDaysBetweenDate2(String date1,String date2){ SimpleDateFormat sd=new SimpleDateFormat("yyyy-MM-dd"); Date d1 = null; try { d1 = sd.parse(date1); } catch (ParseException e) { e.printStackTrace(); } Date d2=null; try { d2 = sd.parse(date2); } catch (ParseException e) { e.printStackTrace(); } int rdays =0; if(d2.getDate()>= d1.getDate()){ rdays = d2.getDate()-d1.getDate()+1; }else{ rdays = d2.getDate()+30-d1.getDate()+1; } return rdays; } /** * * @param dateString 日期字符串 如2011-01-03 * @param dateFormate 日期格式 如yyyy-MM-dd * @return 根据传入的日期字符串和日期格式返回指定格式的日期 */ public final static Date parseDate(String dateString,String dateFormate) { SimpleDateFormat sd=new SimpleDateFormat(dateFormate); Date date=null; try { date=sd.parse(dateString); } catch (Exception ex) { logger.error("Pase the Date(" + dateString + ") occur errors:" + ex.getMessage());
} return date; } public static String getNowDate(String formart){ String temp_str=""; Date dt = new Date(); SimpleDateFormat sdf = new SimpleDateFormat(formart); temp_str=sdf.format(dt); return temp_str; }
/** * 计算两日期之间的相差月份和天数 * @return */ public final static int getMonthDaysBetweenDate(String date1,String date2){
Date d1=new Date(date1); return 0;
} public static String dateToStr(Date date, String format){ SimpleDateFormat dateFormat = new SimpleDateFormat(format); return dateFormat.format(date); } /**得到今天中小时(24H)*/ public final static int getHourOfDay(){ Calendar calendar=Calendar.getInstance(); return calendar.get(calendar.HOUR_OF_DAY); } /**得到今天中分钟*/ public final static int getMinOfDay(){ Calendar calendar=Calendar.getInstance(); return calendar.get(calendar.MINUTE); }
public final static long getDateTimeNow(){ Date date=new Date(); return date.getTime(); }
// 返回第几个月份,不是几月 // 季度一年四季, 第一季度:2月-4月, 第二季度:5月-7月, 第三季度:8月-10月, 第四季度:11月-1月 public static int getQuarterInMonth(int month, boolean isQuarterStart) { int months[] = { 1, 4, 7, 10 }; if (!isQuarterStart) { months = new int[] { 3, 6, 9, 12 }; } if (month >= 2 && month <= 4) return months[0]; else if (month >= 5 && month <= 7) return months[1]; else if (month >= 8 && month <= 10) return months[2]; else return months[3]; }
// 返回第几季度 public static int getQuarterInMonth(int month) { int months[] = { 1, 2, 3, 4 }; //4个季度
if (month >= 1 && month <= 3) return months[0]; else if (month >= 4 && month <= 6) return months[1]; else if (month >= 7 && month <= 9) return months[2]; else return months[3]; } public static String getBetweenDate(String date1,String date2){
return null; }
public static String dateDiff(String startTime, String endTime, String format, String str) { String ret=""; // 按照传入的格式生成一个simpledateformate对象 SimpleDateFormat sd = new SimpleDateFormat(format); long nd = 1000 * 24 * 60 * 60;// 一天的毫秒数 long nh = 1000 * 60 * 60;// 一小时的毫秒数 long nm = 1000 * 60;// 一分钟的毫秒数 long ns = 1000;// 一秒钟的毫秒数 long diff; long day = 0; long hour = 0; long min = 0; long sec = 0; // 获得两个时间的毫秒时间差异 try { diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime(); day = diff / nd;// 计算差多少天 hour = diff % nd / nh + day * 24;// 计算差多少小时 min = diff % nd % nh / nm + day * 24 * 60;// 计算差多少分钟 sec = diff % nd % nh % nm / ns;// 计算差多少秒 // 输出结果 System.out.println("" + day + "天" + (hour - day * 24) + "小时" + (min - day * 24 * 60) + "分钟" + sec + "秒。"); System.out.println("hour=" + hour + ",min=" + min); ret="" + day + "天" + (hour - day * 24) + "小时" + (min - day * 24 * 60) + "分钟" + sec + "秒。"; if (str.equalsIgnoreCase("h")) { // return hour; } else { //return min; }
} catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } if (str.equalsIgnoreCase("h")) { //return hour; } else { //return min; } return ret; }
public static String getCurrentMonthFistDay() { Calendar cal = Calendar.getInstance();
SimpleDateFormat datef=new SimpleDateFormat("yyyy-MM-dd"); //当前月的最后一天 cal.set( Calendar.DATE, 1 ); cal.roll(Calendar.DATE, - 1 ); //当前月的第一天 cal.set(GregorianCalendar.DAY_OF_MONTH, 1); Date beginTime=cal.getTime(); String beginTime1=datef.format(beginTime)+" 00:00:00";
return beginTime1; }
public static String getCurrentMonthLastDay() { Calendar cal = Calendar.getInstance();
SimpleDateFormat datef=new SimpleDateFormat("yyyy-MM-dd"); //当前月的最后一天 cal.set( Calendar.DATE, 1 ); cal.roll(Calendar.DATE, - 1 ); Date endTime=cal.getTime(); String endTime1=datef.format(endTime)+" 23:59:59";
return endTime1; } /** * @param date1 起始日期 * @param date2 截止日期 * @return 两日期之间的天数 */ public final static int getDaysBetweenDate(Date date1,Date date2){ Calendar c1 = Calendar.getInstance(); c1.setTime(date1); c1.set(Calendar.HOUR_OF_DAY, 0); c1.set(Calendar.MINUTE, 0); c1.set(Calendar.SECOND, 0); c1.set(Calendar.MILLISECOND, 0); Calendar c2 = Calendar.getInstance(); c2.setTime(date2); c2.set(Calendar.HOUR_OF_DAY, 0); c2.set(Calendar.MINUTE, 0); c2.set(Calendar.SECOND, 0); c2.set(Calendar.MILLISECOND, 0); long diff = (c2.getTimeInMillis()-c1.getTimeInMillis())/(1000*60*60*24); return ((Long)diff).intValue(); }
/** * 获取一个日期的一天第一个时间和最后一个时间 * strDate 传入日期 * strKey用来判断是获取最开始日期还是最后日期 first 开始 end最后 * 返回的日期格式为 String类型 */ public static String getFirstDate(Date strDate,String strKey){ SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd 00:00:00"); SimpleDateFormat formatEndDate = new SimpleDateFormat("yyyy-MM-dd 23:59:59"); if(strDate!=null&&!"".equals(strDate)){ if(strKey!=null&&"first".equals(strKey)){ return formatDate.format(strDate); }if(strKey!=null&&"end".equals(strKey)){ return formatEndDate.format(strDate); }else{ return formatDate.format(strDate); } }else{ return null; } } /** * 获取一个日期的一天第一个时间和最后一个时间 * strDate 传入日期 * strKey用来判断是获取最开始日期还是最后日期 first 开始 end最后 * 返回的日期格式为Date 类型 */ public static Date getDateFirstDate(Date strDate,String strKey){ try { SimpleDateFormat formatDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:SS"); String date=getFirstDate(strDate,strKey); if(date!=null){ return formatDate.parse(date); }else{ return null; } } catch (Exception e) { e.printStackTrace(); return null; } } public static String getMaxMonthDate(String date) throws ParseException{ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); calendar.setTime(dateFormat.parse(date)); calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); return dateFormat.format(calendar.getTime()); }
/** * 计算两个日期之间相隔多少个月 * @param date1 * @param date2 * @return * @throws ParseException */ public static int getMonthSpace(String date1, String date2){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); try { c1.setTime(sdf.parse(date1)); c2.setTime(sdf.parse(date2)); } catch (ParseException e) { e.printStackTrace(); } return (c2.get(Calendar.YEAR) - c1.get(Calendar.YEAR))* 12 + c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH);
} } |