package com.joe.utilities.common.util; import java.text.DateFormat; import java.text.DecimalFormat; 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.Locale; import java.util.TimeZone; import com.opensymphony.oscache.util.StringUtil; public class MyDate { /** * 得到当前系统日期,格式:yyyy-mm-dd * * @return String */ public static String getCurrentDate() { String currentDate = ""; SimpleDateFormat format1 = new SimpleDateFormat("yyyy'-'MM'-'dd"); format1.setLenient(false); currentDate = format1.format(new Date()); return currentDate; } /** * 得到当前系统日期,格式:yyyymmdd * * @return String */ public static String getCurDate() { String currentDate = ""; SimpleDateFormat format1 = new SimpleDateFormat("yyyyMMdd"); format1.setLenient(false); currentDate = format1.format(new Date()); return currentDate; } /** * 得到当前时间(HH:mm:ss) * * @param cal * @return String */ public static synchronized String getCurTime() { String pattern = "HHmm"; return getDateFormat(getCalendar(), pattern); } /** * 得到当前时间(HHmm) * * @param cal * @return String */ public static synchronized String getCurrentTime() { String pattern = "HH:mm:ss"; return getDateFormat(getCalendar(), pattern); } /** * @param cal * @return String */ public static synchronized String getDateFormat(java.util.Calendar cal) { String pattern = "yyyy-MM-dd HH:mm:ss"; return getDateFormat(cal, pattern); } /** * @param date * @return String */ public static synchronized String getDateFormat(java.util.Date date) { String pattern = "yyyy-MM-dd HH:mm:ss"; return getDateFormat(date, pattern); } /** * @param strDate * @return java.util.Calendar */ public static synchronized Calendar parseCalendarFormat(String strDate) { String pattern = "yyyy-MM-dd HH:mm:ss"; return parseCalendarFormat(strDate, pattern); } /** * @param strDate * @return java.util.Date */ public static synchronized Date parseDateFormat(String strDate) { String pattern = "yyyy-MM-dd HH:mm:ss"; return parseDateFormat(strDate, pattern); } /** * @param cal * @param pattern * @return String */ public static synchronized String getDateFormat(java.util.Calendar cal, String pattern) { return getDateFormat(cal.getTime(), pattern); } /** * 得到当前时间(HHmm) * * @param cal * @return String */ public static synchronized String getCurrentTime(String pattern) { return getDateFormat(getCalendar(), pattern); } /** * @param date * @param pattern * @return String */ public static synchronized String getDateFormat(java.util.Date date, String pattern) { synchronized (sdf) { String str = null; sdf.applyPattern(pattern); str = sdf.format(date); return str; } } /** * 该方法将字符串格式化为标准日期格式 * * @param String * @return String */ public static String getFormatDate(String time) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Date date; String strDate = ""; try { date = df.parse(time); df.applyPattern("yyyy-MM-dd"); strDate = df.format(date); } catch (ParseException e) { } return strDate; } /** * 该方法得到与当天差任意天的格式化时间, * OFFSET表示与当天相差的天数,SPLITDATE表示日期间的分隔符,SPLITTIME表示时间间的分隔符。 * * @param int * offset * @param String * splitdate * @param String * splittime * @return String */ public static String getPriorDay(int offset, String splitdate, String splittime) { SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss"); Calendar theday = Calendar.getInstance(); theday.add(Calendar.DATE, offset); df.applyPattern("yyyy" + splitdate + "MM" + splitdate + "dd" + " " + "HH" + splittime + "mm" + splittime + "ss"); return df.format(theday.getTime()); } public static synchronized Date parseDateDayFormat(String strDate) { String pattern = "yyyy-MM-dd"; return parseDateFormat(strDate, pattern); } private static SimpleDateFormat sdf = new SimpleDateFormat(); public static synchronized Date parseDateFormat(String strDate, String pattern) { synchronized (sdf) { Date date = null; sdf.applyPattern(pattern); try { date = sdf.parse(strDate); } catch (Exception e) { e.printStackTrace(); } return date; } } public static synchronized Calendar getCalendar() { return GregorianCalendar.getInstance(); } /** * @param strDate * @param pattern * @return java.util.Calendar */ public static synchronized Calendar parseCalendarFormat(String strDate, String pattern) { synchronized (sdf) { Calendar cal = null; sdf.applyPattern(pattern); try { sdf.parse(strDate); cal = sdf.getCalendar(); } catch (Exception e) { } return cal; } } /** * 将java.util.Date 对象 转换成 java.sql.Date对象 */ public static synchronized java.sql.Date parseUtilDateToSqlDate(Date date) { if(date!=null){ java.sql.Date sqlDate=new java.sql.Date(date.getTime()); return sqlDate; }else{ return null; } } /** * 格式化util日期类的输出 * * @param utilDate * @param pattern * @return */ public static String getDateStr8() { String myDate=utilDateFormat(new java.util.Date(),2); String tmp_Year=myDate.substring(0,myDate.indexOf("-")); String tmp_Month=myDate.substring(myDate.indexOf("-")+1,myDate.lastIndexOf("-")); if(tmp_Month.length()==1) tmp_Month="0" +tmp_Month; String tmp_Day=myDate.substring(myDate.lastIndexOf("-") +1); if(tmp_Day.length()==1) tmp_Day="0" +tmp_Day; myDate=tmp_Year +"-"+ tmp_Month +"-"+ tmp_Day; return myDate; } /** * 得到大于、小于 或等于制定天数的日期 * * @param num 相差的天数,其中正数为当前日期的后日期;零为当前日期;负数为当前日期的前多少天的日期 * @return Calendar */ public static Calendar getDate(int num) { Calendar cal = Calendar.getInstance(TimeZone.getDefault(), new Locale("zh", "CN")); cal.add(Calendar.DATE, num); return cal; } /** * @param dateStr 日期字符串 格式:"yyyy-MM-dd" */ public static Calendar getDate(String dateStr) { try { String[] date = dateStr.split("-") ; //StringUtil.splitStr(dateStr, "-"); Calendar cal = Calendar.getInstance(TimeZone.getDefault(), new Locale("zh", "CN")); cal.set(Integer.parseInt(date[0]), Integer.parseInt(date[1]) - 1, Integer.parseInt(date[2])); return cal; } catch (Exception e) { System.out.println(e.getMessage()); return Calendar.getInstance(TimeZone.getDefault(), new Locale("zh", "CN")); } } public static Calendar getDateStr(String dateStr) { try { String year = dateStr.substring(0,4); String month= dateStr.substring(4,6); String day = dateStr.substring(6,8); Calendar cal = Calendar.getInstance(TimeZone.getDefault(), new Locale("zh", "CN")); cal.set(Integer.parseInt(year), Integer.parseInt(month) - 1, Integer.parseInt(day)); return cal; } catch (Exception e) { System.out.println(e.getMessage()); return Calendar.getInstance(TimeZone.getDefault(), new Locale("zh", "CN")); } } /** * 格式化util日期类的输出 * * @param utilDate * @param pattern * @return */ public static String utilDateFormat(java.util.Date utilDate, int pattern) { if (null == utilDate) return ""; switch (pattern) { case DateFormat.SHORT: //3 05-4-3 return DateFormat.getDateInstance(DateFormat.SHORT).format(utilDate); case DateFormat.MEDIUM: //2 2005-4-3 return DateFormat.getDateInstance(DateFormat.MEDIUM).format(utilDate); case DateFormat.LONG: //1 2005年4月3日 return DateFormat.getDateInstance(DateFormat.LONG).format(utilDate); case DateFormat.FULL: //0 2005年4月3日 星期日 default: return DateFormat.getDateInstance(DateFormat.FULL).format(utilDate); } } /** * 格式化SQL日期类的输出 * * @param sqlDate * @param pattern * @return */ public static String sqlDateFormat(java.sql.Date sqlDate, int pattern) { if (null == sqlDate) return ""; java.util.Date dd = new java.util.Date(); dd.setTime(0); if (4 > pattern && 0 <= pattern) return utilDateFormat(new java.util.Date(sqlDate.getTime()), pattern); return sqlDate.toString(); } /** * 格式化SQL日期类的输出 * * @param sqlDate * @return */ public static Calendar sqlDateFormat(java.sql.Date sqlDate) { Calendar cal = Calendar.getInstance(TimeZone.getDefault(), new Locale("zh", "CN")); if (null == sqlDate) return null; cal.setTime(new java.util.Date(sqlDate.getTime())); return cal; } //数字补位01 public static String formatNum(int num) { if (0 < num && 10 > num) return "0" + num; return "" + num; } /** * 计算某年某月的日期数 * * @param year * @param month * @return */ public static int countDaysOfMonth(int year, int month) { switch (month) { case 1: case 3: case 5: case 7: case 8: case 10: case 12: return 31; case 4: case 6: case 9: case 11: return 30; case 2: //是否为闰年 boolean isRunYear = (year % 400 == 0) || (year % 4 == 0 && year % 100 != 0); return isRunYear ? 29 : 28; default: //包含 0月及 13月 return 31; } } /** * 是否为月末 * * @param year * @param month * @param dy * @return */ public static boolean isLastDayOfMonth(int year, int month, int dy) { if (dy == countDaysOfMonth(year, month)) return true; return false; } /** * 是否为年末 * * @param month * @param dy * @return */ public static boolean isLastDayOfYear(int month, int dy) { if (12 == month && 31 == dy) return true; return false; } /** * 是否为季末 * * @param year * @param month * @param dy * @return */ public static boolean isLastDayOfQuarter(int year, int month, int dy) { if (month % 3 == 0 && dy == countDaysOfMonth(year, month)) return true; return false; } /** * 是否为新年 * * @param month * @param dy * @return */ public static boolean isNewYear(int month, int dy) { if (1 == month && 1 == dy) return true; return false; } /** * 是否为下半年 * * @param month * @param dy * @return */ public static boolean isNewHalfYear(int month, int dy) { if (7 == month && 1 == dy) return true; return isNewYear(month, dy); } /** * 是否为新季 * * @param month * @param dy * @return */ public static boolean isNewQuarter(int month, int dy) { if (month % 3 == 1 && dy == 1) return true; return false; } /** * 是否为新月份 * * @param dy 日期 * @return */ public static boolean isNewMonth(int dy) { if (1 == dy) return true; return false; } /** * 是否为新旬 * * @param dy * @return */ public static boolean isNewTenday(int dy) { if (1 == dy % 10 && dy < 31) return true; return false; } /** * 是否为周一 * * @param year * @param month * @param dy * @return */ public static boolean isNewWeek(int year, int month, int dy) { java.util.Date utilDate = new java.util.Date(year + "/" + month + "/" + dy); return checkDayOfWeek(utilDate, 1); } /** * 是否为周一 * * @param utilDate * @return */ public static boolean isNewWeek(java.util.Date utilDate) { return checkDayOfWeek(utilDate, 1); } /** * 是否为周末(周五) * * @param utilDate * @return */ public static boolean isLastDayOfWeek(java.util.Date utilDate) { return checkDayOfWeek(utilDate, 5); } /** * 验证某天为星期几 * * @param utilDate 验证日期 * @param dw 星期数 * @return */ public static boolean checkDayOfWeek(java.util.Date utilDate, int dw) { if (null == utilDate) return false; if (dw == utilDate.getDay()) return true; return false; } private static HashMap CYCLE_MAP = null; public static String CYL_YEAR = "Y"; public static String CYL_HLF_YEAR = "H"; public static String CYL_QUARTER = "S"; public static String CYL_MONTH = "M"; public static String CYL_TEN_DAY = "T"; public static String CYL_WEEK = "W"; public static String CYL_DAY = "D"; /** * 周期集 * * @return */ public static HashMap getCycleMap() { if (null == CYCLE_MAP) { CYCLE_MAP = new java.util.HashMap(); CYCLE_MAP.put(CYL_YEAR, "年"); CYCLE_MAP.put(CYL_HLF_YEAR, "半年"); CYCLE_MAP.put(CYL_QUARTER, "季"); CYCLE_MAP.put(CYL_MONTH, "月"); CYCLE_MAP.put(CYL_TEN_DAY, "旬"); //CYCLE_MAP.put(CYL_WEEK, "周"); CYCLE_MAP.put(CYL_DAY, "日"); } return CYCLE_MAP; } /** * 某日可用的周期集 * * @return */ public static String[] getCycleTskOfDay(java.util.Date utilDate) { int month = utilDate.getMonth()+ 1; int dt = utilDate.getDate(); //新年 if (isNewYear(month, dt)) { return new String[]{CYL_YEAR, CYL_HLF_YEAR, CYL_QUARTER, CYL_MONTH, CYL_TEN_DAY, CYL_DAY}; } //半年 if (isNewHalfYear(month, dt)) { return new String[]{CYL_HLF_YEAR, CYL_QUARTER, CYL_MONTH, CYL_TEN_DAY, CYL_DAY}; } //季度 if (isNewQuarter(month, dt)) { return new String[]{CYL_QUARTER, CYL_MONTH, CYL_TEN_DAY, CYL_DAY}; } //月 if (isNewMonth(dt)) { return new String[]{CYL_MONTH, CYL_TEN_DAY, CYL_DAY}; } //旬 if (isNewTenday(dt)) { return new String[]{CYL_TEN_DAY, CYL_DAY}; } return new String[]{CYL_DAY}; } /** * 今天的周期集 * * @return */ public static String[] getCycleTskOfCurDay() { return getCycleTskOfDay(new java.util.Date()); } //加工周期 private static String[] ARY_CYL = {CYL_YEAR, CYL_HLF_YEAR, CYL_QUARTER, CYL_MONTH, CYL_TEN_DAY, CYL_DAY}; private static String[] ARY_Field = {"prcylY", "prcylH", "prcylS", "prcylM", "prcylT", "prcylD"}; //周期标示 private static String CYL_TYPE = "Y"; public static String[] getCylFieldArray() { return ARY_Field; } public static String[] getCylValueArray() { return ARY_CYL; } /** * @param ary * @return */ public static String getStrCylQuery(String[] ary, String tabAlas) { StringBuffer bf = new StringBuffer(); if (null == ary || ary.length == 0) { for (int i = 0; i < ARY_Field.length; i++ ) { bf.append(getOneCylQuery(tabAlas, ARY_Field[i], "N")); } } else { for (int i = 0; i < ary.length; i++ ) { String s = ary[i]; if (null != s) for (int j = 0; j < ARY_Field.length; j++ ) { if (s.equals(ARY_CYL[j])) bf.append(getOneCylQuery(tabAlas, ARY_Field[j], CYL_TYPE)); } } } return bf.toString(); } private static StringBuffer getOneCylQuery(String tabAlas, String field, String value) { StringBuffer bf = new StringBuffer(); if (null == tabAlas || null == field) return bf; String alias = tabAlas +"."+ field; if ("Y".equals(value)) { bf.append(" and ").append(alias).append(" ='").append(CYL_TYPE).append("' \n"); } else { bf.append(" and ").append(alias).append(" !='").append(CYL_TYPE).append("' \n"); } return bf; } public static String getYearOptions(int defYear, int maxYear, int minYear) { if (0 == maxYear) { Calendar cal = Calendar.getInstance(); maxYear = cal.get(Calendar.YEAR); } if (0 == minYear) minYear = 1970; StringBuffer bfOption = new StringBuffer(); for (int i = maxYear; i >= minYear; i--) { if (defYear == i) bfOption.append("<option value=" + i + " selected>" + i + "</option>"); else bfOption.append("<option value=" + i + ">" + i + "</option>"); } return bfOption.toString(); } public static String getMonthOptions(int month, DecimalFormat df) { StringBuffer bfOption = new StringBuffer(); for (int i = 1; i <= 12; i++ ) { if (month == i) bfOption.append("<option value=" + df.format(i) + " selected>"+ i + "</option>"); else bfOption.append("<option value=" + df.format(i) + ">" + i + "</option>"); } return bfOption.toString(); } public static String getDayOptions(int year, int month, int day, DecimalFormat df) { StringBuffer bfOption = new StringBuffer(); int lastDay = 31; if (0 < year && 0 < month) lastDay = countDaysOfMonth(year, month); for (int i = 1; i <= lastDay; i ++) { if (day == i) bfOption.append("<option value=" + df.format(i) + " selected>" + i + "</option>"); else bfOption.append("<option value=" + df.format(i) + ">" + i + "</option>"); } return bfOption.toString(); } //第几季 public static int getQuartarNum(int month) { if (month < 4) return 1; else if (month < 7) return 2; else if (month < 10) return 3; else return 4; } //第几旬 public static int getTenNum(int day) { if (day < 11) return 1; else if (day < 21) return 2; else return 3; } //第几周 public static int getWeekNum(int year, int month, int day) { java.util.Date utilDate = new java.util.Date(year + "/" + month + "/" + day); return getWeekNum(utilDate); } //第几周 public static int getWeekNum(java.util.Date utilDate) { Calendar cal = Calendar.getInstance(TimeZone.getDefault(), new Locale("zh", "CN")); cal.setTime(utilDate); return cal.get(Calendar.WEEK_OF_MONTH); } //上下半年 public static int getHalfYearNum(int month) { if (month < 7) return 0; return 1; } public static String getYestoday(Date todayDataStr) { //根据今天日期获取昨天日期 SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd"); GregorianCalendar cal = new GregorianCalendar(); Date date; String yestodayDate = ""; try { // date = DateFormat.parse(todayDataStr); date = new Date(); cal.setTime(date); cal.add(Calendar.DAY_OF_MONTH, -1); yestodayDate = DateFormat.format(cal.getTime()); } catch (Exception e) { e.getMessage(); } return yestodayDate; } public static String getTomorrowDay(Date todayDataStr) { //根据今天日期获取昨天日期 SimpleDateFormat DateFormat = new SimpleDateFormat("yyyy-MM-dd"); GregorianCalendar cal = new GregorianCalendar(); Date date; String yestodayDate = ""; try { // date = DateFormat.parse(todayDataStr); date = new Date(); cal.setTime(date); cal.add(Calendar.DAY_OF_MONTH, 1); yestodayDate = DateFormat.format(cal.getTime()); } catch (Exception e) { e.getMessage(); } return yestodayDate; } //计算两个日期之间的天数 public static int daysOfTwo(Date fDate,Date oDate) { //首先定义一个calendar,必须使用getInstance()进行实例化 Calendar aCalendar=Calendar.getInstance(); //里面野可以直接插入date类型 aCalendar.setTime(fDate); //计算此日期是一年中的哪一天 int day1=aCalendar.get(Calendar.DAY_OF_YEAR); aCalendar.setTime(oDate); int day2=aCalendar.get(Calendar.DAY_OF_YEAR); //求出两日期相隔天数 int days=day2-day1; return days; } public String getMyDate(int type) { String date=""; Calendar cal = Calendar.getInstance(); int pm_am=cal.get(Calendar.AM_PM); int hour=cal.get(Calendar.HOUR); if(pm_am==Calendar.PM) hour+=12; switch(type) { case 1: //yyyy-mm-dd date+=cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.DATE); break; case 2: //yyyy-mm-dd hh:mi:ss date+=cal.get(Calendar.YEAR)+"-"+(cal.get(Calendar.MONTH)+1)+"-"+cal.get(Calendar.DATE) +" "+hour+":"+cal.get(Calendar.MINUTE)+":"+ cal.get(Calendar.SECOND); break; default: date+=null; } return date; } /* * Method:输出两日期差,单位(天) */ public long getQuot(String time1, String time2) { long quot = 0; SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd"); try { Date date1 = ft.parse( time1 ); Date date2 = ft.parse( time2 ); quot = date1.getTime() - date2.getTime(); quot = quot / 1000 / 60 / 60 / 24; } catch (ParseException e) { e.printStackTrace(); } return quot; } //3、转MYSQL的datetime日期类型: /* * Date类型转换为MYSQL DateTime类型 */ public static String DateToMySQLDateTimeString(String date) { final String[] MONTH = {"Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec",}; StringBuffer ret = new StringBuffer(); String dateToString = date.toString(); //like "Sat Dec 17 15:55:16 CST 2005" ret.append(dateToString.substring(24,24+4));//append yyyy String sMonth = dateToString.substring(4,4+3); for(int i=0;i<12;i++) { //append mm if(sMonth.equalsIgnoreCase(MONTH[i])) { if((i+1) < 10) ret.append("-0"); else ret.append("-"); ret.append((i+1)); break; } } ret.append("-"); ret.append(dateToString.substring(8,8+2)); ret.append(" "); ret.append(dateToString.substring(11,11+8)); return ret.toString(); } }