package cn.knet.data.untils; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * yyyy-MM-dd HH:mm:ss * @author zhaoyb * */ public class DateUtil { /** * 把日期字符串格式化成日期类型 * @param dateStr * @param format * @return */ public static Date convert2Date(String dateStr, String format) { SimpleDateFormat simple = new SimpleDateFormat(format); try { simple.setLenient(false); return simple.parse(dateStr); } catch (Exception e) { return null; } } /** * 把日期类型格式化成字符串 * @param date * @param format * @return */ public static String convert2String(Date date, String format) { SimpleDateFormat formater = new SimpleDateFormat(format); try { return formater.format(date); } catch (Exception e) { return null; } } /** * 转sql的time格式 * @param date * @return */ public static java.sql.Timestamp convertSqlTime(Date date){ java.sql.Timestamp timestamp = new java.sql.Timestamp(date.getTime()); return timestamp; } /** * 转sql的日期格式 * @param date * @return */ public static java.sql.Date convertSqlDate(Date date){ java.sql.Date Datetamp = new java.sql.Date(date.getTime()); return Datetamp; } /** * 获取当前日期 * @param format * @return */ public static String getCurrentDate(String format) { return new SimpleDateFormat(format).format(new Date()); } /** * 获取时间戳 * @return */ public static long getTimestamp() { return System.currentTimeMillis(); } /** * 获取月份的天数 * @param year * @param month * @return */ public static int getDaysOfMonth(int year, int month) { Calendar calendar = Calendar.getInstance(); calendar.set(year, month - 1, 1); return calendar.getActualMaximum(Calendar.DAY_OF_MONTH); } /** * 获取日期的年 * @param date * @return */ public static int getYear(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.YEAR); } /** * 获取日期的月 * @param date * @return */ public static int getMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MONTH) + 1; } /** * 获取日期的日 * @param date * @return */ public static int getDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.DATE); } /** * 获取日期的时 * @param date * @return */ public static int getHour(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.HOUR); } /** * 获取日期的分种 * @param date * @return */ public static int getMinute(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MINUTE); } /** * 获取日期的秒 * @param date * @return */ public static int getSecond(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.SECOND); } /** * 获取星期几 * @param date * @return */ public static int getWeekDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); return dayOfWeek-1; } /** * 获取哪一年共有多少周 * @param year * @return */ public static int getMaxWeekNumOfYear(int year) { Calendar c = new GregorianCalendar(); c.set(year, Calendar.DECEMBER, 31, 23, 59, 59); return getWeekNumOfYear(c.getTime()); } /** * 取得某天是一年中的多少周 * @param date * @return */ public static int getWeekNumOfYear(Date date) { Calendar c = new GregorianCalendar(); c.setFirstDayOfWeek(Calendar.MONDAY); c.setMinimalDaysInFirstWeek(7); c.setTime(date); return c.get(Calendar.WEEK_OF_YEAR); } /** * 取得某天所在周的第一天 * @param year * @return */ public static Date getFirstDayOfWeek(Date date) { Calendar c = new GregorianCalendar(); c.setFirstDayOfWeek(Calendar.MONDAY); c.setTime(date); c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek()); return c.getTime(); } /** * 取得某天所在周的最后一天 * @param date * @return */ public static Date getLastDayOfWeek(Date date) { Calendar c = new GregorianCalendar(); c.setFirstDayOfWeek(Calendar.MONDAY); c.setTime(date); c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek() + 6); return c.getTime(); } /** * 取得某年某周的第一天 对于交叉:2008-12-29到2009-01-04属于2008年的最后一周,2009-01-05为2009年第一周的第一天 * @param year * @param week * @return */ public static Date getFirstDayOfWeek(int year, int week) { Calendar calFirst = Calendar.getInstance(); calFirst.set(year, 0, 7); Date firstDate = getFirstDayOfWeek(calFirst.getTime()); Calendar firstDateCal = Calendar.getInstance(); firstDateCal.setTime(firstDate); Calendar c = new GregorianCalendar(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, Calendar.JANUARY); c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE)); Calendar cal = (GregorianCalendar) c.clone(); cal.add(Calendar.DATE, (week - 1) * 7); firstDate = getFirstDayOfWeek(cal.getTime()); return firstDate; } /** * 取得某年某周的最后一天 对于交叉:2008-12-29到2009-01-04属于2008年的最后一周, 2009-01-04为 * 2008年最后一周的最后一天 * @param year * @param week * @return */ public static Date getLastDayOfWeek(int year, int week) { Calendar calLast = Calendar.getInstance(); calLast.set(year, 0, 7); Date firstDate = getLastDayOfWeek(calLast.getTime()); Calendar firstDateCal = Calendar.getInstance(); firstDateCal.setTime(firstDate); Calendar c = new GregorianCalendar(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, Calendar.JANUARY); c.set(Calendar.DATE, firstDateCal.get(Calendar.DATE)); Calendar cal = (GregorianCalendar) c.clone(); cal.add(Calendar.DATE, (week - 1) * 7); Date lastDate = getLastDayOfWeek(cal.getTime()); return lastDate; } private static Date add(Date date, int calendarField, int amount) { if (date == null) { throw new IllegalArgumentException("The date must not be null"); } else { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(calendarField, amount); return c.getTime(); } } /* * 1则代表的是对年份操作, 2是对月份操作, 3是对星期操作, 5是对日期操作, 11是对小时操作, 12是对分钟操作, 13是对秒操作, * 14是对毫秒操作 */ /** * 增加年 * @param date * @param amount * @return */ public static Date addYears(Date date, int amount) { return add(date, 1, amount); } /** * 增加月 * @param date * @param amount * @return */ public static Date addMonths(Date date, int amount) { return add(date, 2, amount); } /** * 增加周 * @param date * @param amount * @return */ public static Date addWeeks(Date date, int amount) { return add(date, 3, amount); } /** * 增加天 * @param date * @param amount * @return */ public static Date addDays(Date date, int amount) { return add(date, 5, amount); } /** * 增加时 * @param date * @param amount * @return */ public static Date addHours(Date date, int amount) { return add(date, 11, amount); } /** * 增加分 * @param date * @param amount * @return */ public static Date addMinutes(Date date, int amount) { return add(date, 12, amount); } /** * 增加秒 * @param date * @param amount * @return */ public static Date addSeconds(Date date, int amount) { return add(date, 13, amount); } /** * 增加毫秒 * @param date * @param amount * @return */ public static Date addMilliseconds(Date date, int amount) { return add(date, 14, amount); } /** * time差 * @param before * @param after * @return */ public static long diffTimes(Date before, Date after){ return after.getTime() - before.getTime(); } /** * 秒差 * @param before * @param after * @return */ public static long diffSecond(Date before, Date after){ return (after.getTime() - before.getTime())/1000; } /** * 分种差 * @param before * @param after * @return */ public static int diffMinute(Date before, Date after){ return (int)(after.getTime() - before.getTime())/1000/60; } /** * 时差 * @param before * @param after * @return */ public static int diffHour(Date before, Date after){ return (int)(after.getTime() - before.getTime())/1000/60/60; } /** * 天数差 * @param date1 * @param date2 * @return */ public static int diffDay(Date before, Date after) { return Integer.parseInt(String.valueOf(((after.getTime() - before.getTime()) / 86400000))); } /** * 月差 * @param before * @param after * @return */ public static int diffMonth(Date before, Date after){ int monthAll=0; int yearsX = diffYear(before,after); Calendar c1 = Calendar.getInstance(); Calendar c2 = Calendar.getInstance(); c1.setTime(before); c2.setTime(after); int monthsX = c2.get(Calendar.MONTH) - c1.get(Calendar.MONTH); monthAll=yearsX*12+monthsX; int daysX =c2.get(Calendar.DATE) - c1.get(Calendar.DATE); if(daysX>0){ monthAll=monthAll+1; } return monthAll; } /** * 年差 * @param before * @param after * @return */ public static int diffYear(Date before, Date after) { return getYear(after) - getYear(before); } /** * 设置23:59:59 * @param date * @return */ public static Date setEndDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); return calendar.getTime(); } /** * 设置00:00:00 * @param date * @return */ public static Date setStartDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.set(Calendar.HOUR_OF_DAY, 00); calendar.set(Calendar.MINUTE, 00); calendar.set(Calendar.SECOND, 00); return calendar.getTime(); } }