util之日期工具类
package com.xxx.core.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.List; import org.apache.commons.lang.time.DateUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; 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[] { StringPool.DATE_FORMAT_DATETIME, StringPool.DATE_FORMAT_DATE }); } catch (Exception ex) { logger.error("Pase the Date(" + dateString + ") occur errors:" + ex.getMessage()); } return date; } /** * 日期加一天 * * @param date * @return */ /* public static String addOneDay(String date) { DateFormat format = new SimpleDateFormat(StringPool.DATE_FORMAT_DATE); Calendar calendar = Calendar.getInstance(); try { Date dd = format.parse(date); calendar.setTime(dd); calendar.add(Calendar.DAY_OF_MONTH, 1); } catch (ParseException e) { e.printStackTrace(); } String tmpDate = format.format(calendar.getTime()); return tmpDate.substring(5, 7) + "/" + tmpDate.substring(8, 10) + "/" + tmpDate.substring(0, 4); }*/ /** * 加一小时 * * @param date * @return */ public static String addOneHour(String date) { String amPm = date.substring(20, 22); DateFormat format = new SimpleDateFormat(StringPool.DATE_FORMAT_DATETIME); Calendar calendar = Calendar.getInstance(); int hour = Integer.parseInt(date.substring(11, 13)); try { if (amPm.equals("PM")) { hour += 12; } date = date.substring(0, 11) + (hour >= 10 ? hour : "0" + hour) + date.substring(13, 19); Date dd = format.parse(date); calendar.setTime(dd); calendar.add(Calendar.HOUR_OF_DAY, 1); } catch (ParseException e) { e.printStackTrace(); } String tmpDate = format.format(calendar.getTime()); hour = Integer.parseInt(tmpDate.substring(11, 13)); amPm = hour >= 12 && hour != 0 ? "PM" : "AM"; if (amPm.equals("PM")) { hour -= 12; } tmpDate = tmpDate.substring(5, 7) + "/" + tmpDate.substring(8, 10) + "/" + tmpDate.substring(0, 4) + " " + (hour >= 10 ? hour : "0" + hour) + tmpDate.substring(13, tmpDate.length()) + " " + amPm; return tmpDate; } /** * 标准时间格式转为时间字符格式 * * @param timeStr * eg:Mon Feb 06 00:00:00 CST 2012 * @return */ public static String timeStrToDateStr(String timeStr) { String dateStr = timeStr.substring(24, 28) + "-"; String mon = timeStr.substring(4, 7); if (mon.equals("Jan")) { dateStr += "01"; } else if (mon.equals("Feb")) { dateStr += "02"; } else if (mon.equals("Mar")) { dateStr += "03"; } else if (mon.equals("Apr")) { dateStr += "04"; } else if (mon.equals("May")) { dateStr += "05"; } else if (mon.equals("Jun")) { dateStr += "06"; } else if (mon.equals("Jul")) { dateStr += "07"; } else if (mon.equals("Aug")) { dateStr += "08"; } else if (mon.equals("Sep")) { dateStr += "09"; } else if (mon.equals("Oct")) { dateStr += "10"; } else if (mon.equals("Nov")) { dateStr += "11"; } else if (mon.equals("Dec")) { dateStr += "12"; } dateStr += "-" + timeStr.substring(8, 10); return dateStr; } /** * 根据日期得到星期多余天数 * * @param sDate * @return */ public static int getExtraDayOfWeek(String sDate) { try { SimpleDateFormat format = new SimpleDateFormat(StringPool.DATE_FORMAT_DATE); Date date = format.parse(sDate); String weekday = date.toString().substring(0, 3); if (weekday.equals("Mon")) { return 1; } else if (weekday.equals("Tue")) { return 2; } else if (weekday.equals("Wed")) { return 3; } else if (weekday.equals("Thu")) { return 4; } else if (weekday.equals("Fri")) { return 5; } else if (weekday.equals("Sat")) { return 6; } else { return 0; } } catch (Exception ex) { return 0; } } public static int dayForWeek(Date date) { return dayForWeek(date, 1); } public static int dayForWeek(Date date, int firstDay) { Calendar cal = Calendar.getInstance(); cal.setTime(date); int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); if (firstDay == 0) return dayOfWeek; return dayOfWeek == 1 ? 7 : dayOfWeek - 1; } public static void main(String[] args) throws Exception { Date date = DateFormatUtil.parseDate("2015-08-02"); System.out.println(dayForWeek(date)); } /** * 根据日期得到星期多余天数 * * @param sDate * @return */ public static String getDateWeekDay(String sDate) { try { SimpleDateFormat format = new SimpleDateFormat(StringPool.DATE_FORMAT_DATE); Date date = format.parse(sDate); String weekday = date.toString().substring(0, 3); // format.format(date)+" "+ return weekday; } catch (Exception ex) { return ""; } } /** * 取得上下五年 * * @param cal * @return */ public static List<String> getUpDownFiveYear(Calendar cal) { List<String> yearlist = new ArrayList<String>(); int curyear = cal.get(Calendar.YEAR); yearlist.add(String.valueOf(curyear - 2)); yearlist.add(String.valueOf(curyear - 1)); yearlist.add(String.valueOf(curyear)); yearlist.add(String.valueOf(curyear + 1)); yearlist.add(String.valueOf(curyear + 2)); return yearlist; } /** * 取得12个月 * * @param cal * @return */ public static List<String> getTwelveMonth() { List<String> monthlist = new ArrayList<String>(); for (int idx = 1; idx <= 12; idx++) { monthlist.add(String.valueOf(idx)); } return monthlist; } /** * 得到两日期间所有日期 * * @param startTime * @param endTime * @return * @throws Exception */ public static String[] getDaysBetweenDate(String startTime, String endTime) { String[] dateArr = null; try { String stime = timeStrToDateStr(startTime); String etime = timeStrToDateStr(endTime); // 日期相减算出秒的算法 Date date1 = new SimpleDateFormat(StringPool.DATE_FORMAT_DATE).parse(stime); Date date2 = new SimpleDateFormat(StringPool.DATE_FORMAT_DATE).parse(etime); long day = (date1.getTime() - date2.getTime()) / (24 * 60 * 60 * 1000) > 0 ? (date1.getTime() - date2.getTime()) / (24 * 60 * 60 * 1000) : (date2.getTime() - date1.getTime()) / (24 * 60 * 60 * 1000); dateArr = new String[Integer.valueOf(String.valueOf(day + 1))]; for (int idx = 0; idx < dateArr.length; idx++) { if (idx == 0) { dateArr[idx] = stime; } else { stime = addOneDay(stime); stime = stime.substring(6, 10) + "-" + stime.substring(0, 2) + "-" + stime.substring(3, 5); dateArr[idx] = stime; } } } catch (ParseException e) { e.printStackTrace(); } return dateArr; } /** * 获取当月第一天 * * @return */ public static Date getMonthFirstDay() { Calendar ca = Calendar.getInstance(); ca.set(Calendar.DAY_OF_MONTH, 1); return ca.getTime(); } /** * 获取当月最后一天 * * @return */ public static Date getMonthLastDay() { Calendar ca = Calendar.getInstance(); ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH)); return ca.getTime(); } /** * 根据年月获取当月最后一天 * * @param yearmonth * yyyy-MM * @return yyyy-MM-dd * @throws ParseException */ public static String getLastDayOfMonth(String yearmonth) { try { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM"); Date dd = format.parse(yearmonth); Calendar cal = Calendar.getInstance(); cal.setTime(dd); int cc = cal.getActualMaximum(Calendar.DAY_OF_MONTH); String result = yearmonth + "-" + cc; return result; } catch (ParseException e) { e.printStackTrace(); } return null; } /** * 字符串的日期加上一天,在返回字符串 */ public String addOneDay(String countdate) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); c.setTime(sdf.parse(countdate)); c.add(Calendar.DATE, 1); String rtn = sdf.format(c.getTime()); return rtn; } /** * * 字符串的日期加上一天,在返回字符串 */ public String subOneDay(String countdate) throws Exception { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); c.setTime(sdf.parse(countdate)); c.add(Calendar.DATE, -1); String rtn = sdf.format(c.getTime()); return rtn; } }