时间工具类
工具类一:
package com.common.time; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * * 功能描述: * * @author Administrator * @Date Jul 19, 2008 * @Time 9:47:53 AM * @version 1.0 */ public class DateUtil { public static Date date = null; public static DateFormat dateFormat = null; public static Calendar calendar = null; /** * 功能描述:格式化日期 * * @param dateStr * String 字符型日期 * @param format * String 格式 * @return Date 日期 */ public static Date parseDate(String dateStr, String format) { try { dateFormat = new SimpleDateFormat(format); String dt = dateStr.replaceAll("-", "/"); if ((!dt.equals("")) && (dt.length() < format.length())) { dt += format.substring(dt.length()).replaceAll("[YyMmDdHhSs]", "0"); } date = (Date) dateFormat.parse(dt); } catch (Exception e) {} return date; } /** * 功能描述:格式化日期 * * @param dateStr * String 字符型日期:YYYY-MM-DD 格式 * @return Date */ public static Date parseDate(String dateStr) { return parseDate(dateStr, "yyyy/MM/dd"); } /** * 功能描述:格式化输出日期 * * @param date * Date 日期 * @param format * String 格式 * @return 返回字符型日期 */ public static String format(Date date, String format) { String result = ""; try { if (date != null) { dateFormat = new SimpleDateFormat(format); result = dateFormat.format(date); } } catch (Exception e) {} return result; } /** * 功能描述: * * @param date * Date 日期 * @return */ public static String format(Date date) { return format(date, "yyyy/MM/dd"); } /** * 功能描述:返回年份 * * @param date * Date 日期 * @return 返回年份 */ public static int getYear(Date date) { calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.YEAR); } /** * 功能描述:返回月份 * * @param date * Date 日期 * @return 返回月份 */ public static int getMonth(Date date) { calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MONTH) + 1; } /** * 功能描述:返回日份 * * @param date * Date 日期 * @return 返回日份 */ public static int getDay(Date date) { calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.DAY_OF_MONTH); } /** * 功能描述:返回小时 * * @param date * 日期 * @return 返回小时 */ public static int getHour(Date date) { calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.HOUR_OF_DAY); } /** * 功能描述:返回分钟 * * @param date * 日期 * @return 返回分钟 */ public static int getMinute(Date date) { calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MINUTE); } /** * 返回秒钟 * * @param date * Date 日期 * @return 返回秒钟 */ public static int getSecond(Date date) { calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.SECOND); } /** * 功能描述:返回毫秒 * * @param date * 日期 * @return 返回毫秒 */ public static long getMillis(Date date) { calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.getTimeInMillis(); } /** * 功能描述:返回字符型日期 * * @param date * 日期 * @return 返回字符型日期 yyyy/MM/dd 格式 */ public static String getDate(Date date) { return format(date, "yyyy/MM/dd"); } /** * 功能描述:返回字符型时间 * * @param date * Date 日期 * @return 返回字符型时间 HH:mm:ss 格式 */ public static String getTime(Date date) { return format(date, "HH:mm:ss"); } /** * 功能描述:返回字符型日期时间 * * @param date * Date 日期 * @return 返回字符型日期时间 yyyy/MM/dd HH:mm:ss 格式 */ public static String getDateTime(Date date) { return format(date, "yyyy/MM/dd HH:mm:ss"); } /** * 功能描述:日期相加 * * @param date * Date 日期 * @param day * int 天数 * @return 返回相加后的日期 */ public static Date addDate(Date date, int day) { calendar = Calendar.getInstance(); long millis = getMillis(date) + ((long) day) * 24 * 3600 * 1000; calendar.setTimeInMillis(millis); return calendar.getTime(); } /** * 功能描述:日期相减 * * @param date * Date 日期 * @param date1 * Date 日期 * @return 返回相减后的日期 */ public static int diffDate(Date date, Date date1) { return (int)((getMillis(date) - getMillis(date1)) / (24 * 3600 * 1000)); } /** * 功能描述:取得指定月份的第一天 * * @param strdate * String 字符型日期 * @return String yyyy-MM-dd 格式 */ public static String getMonthBegin(String strdate) { date = parseDate(strdate); return format(date, "yyyy-MM") + "-01"; } /** * 功能描述:取得指定月份的最后一天 * * @param strdate * String 字符型日期 * @return String 日期字符串 yyyy-MM-dd格式 */ public static String getMonthEnd(String strdate) { date = parseDate(getMonthBegin(strdate)); calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.MONTH, 1); calendar.add(Calendar.DAY_OF_YEAR, -1); return formatDate(calendar.getTime()); } /** * 功能描述:常用的格式化日期 * * @param date * Date 日期 * @return String 日期字符串 yyyy-MM-dd格式 */ public static String formatDate(Date date) { return formatDateByFormat(date, "yyyy-MM-dd"); } /** * 功能描述:以指定的格式来格式化日期 * * @param date * Date 日期 * @param format * String 格式 * @return String 日期字符串 */ public static String formatDateByFormat(Date date, String format) { String result = ""; if (date != null) { try { SimpleDateFormat sdf = new SimpleDateFormat(format); result = sdf.format(date); } catch (Exception ex) { ex.printStackTrace(); } } return result; } public static void main(String[] args) { Date d = new Date(); // System.out.println(d.toString()); // System.out.println(formatDate(d).toString()); // System.out.println(getMonthBegin(formatDate(d).toString())); // System.out.println(getMonthBegin("2008/07/19")); // System.out.println(getMonthEnd("2008/07/19")); System.out.println(addDate(d, 15).toString()); } }
工具类二:
package www.mingketang.com; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.Locale; import java.util.TimeZone; public class DateUtils { //http响应头Expire属性时间格式 public static final String HTTP_RESPONSE_DATE_HEADER = "EEE, dd MMM yyyy HH:mm:ss zzz"; //http响应头Expire属性时间格式工具 public static final SimpleDateFormat responseHeaderFormat = new SimpleDateFormat(HTTP_RESPONSE_DATE_HEADER, Locale.US); static { responseHeaderFormat.setTimeZone(TimeZone.getTimeZone("GMT")); } /** * 某个时间点的下个月的第一天 * @param day * @return */ public static Date firstDayInNextMonth(Date day) { Calendar c = Calendar.getInstance(); c.setTime(day); c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 1); c.set(Calendar.DAY_OF_MONTH, 1); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); return c.getTime(); } /** * 获取某天在星期中的排序值: * 星期日 -> 星期六 对应为:1 -> 7 * @param date * @return */ public static int getDateInWeek(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.DAY_OF_WEEK); } /** * 获取指定日期后n天的凌晨 * @param date * @param n * @return */ public static Date getDateNextDay(Date date, int n) { Calendar c = Calendar.getInstance(); c.setTime(date); c.add(Calendar.DATE, n); return c.getTime(); } /** * 获取下n个月后的日期 * @param n 月份偏移量 * @return */ public static Date getDateNextMonth(int n) { Calendar now = Calendar.getInstance(); now.set(Calendar.MONTH, now.get(Calendar.MONTH) + n); // 设置时间向前进n个月 now.set(Calendar.HOUR_OF_DAY, 0); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); return now.getTime(); } /** * 获取今天在本月中的号码 * @return */ public static int getDateOfMoth() { return Calendar.getInstance().get(Calendar.DAY_OF_MONTH); } /** * 本月的所有日期集合 * @return */ public static List < Date > getDatesInMonth() { List < Date > dates = new ArrayList < Date > (); Calendar c = Calendar.getInstance(); // 设置代表的日期为1号 c.set(Calendar.DATE, 1); // 获得当前月的最大日期数 int maxDay = c.getActualMaximum(Calendar.DATE); for (int i = 1; i <= maxDay; i++) { c.set(Calendar.DATE, i); dates.add(c.getTime()); } return dates; } /** * 获取某个时间所在的月份 * @param date * @return */ public static int getMonth(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.MONTH) + 1; } /** * 获取本月最后一天 * @return */ public static Date getMonthEnd() { int length = getDateOfMoth(); Calendar c = Calendar.getInstance(); c.set(Calendar.DATE, length); c.set(Calendar.HOUR, 24); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); return c.getTime(); } /** * 获取某个时间所在月份的最后一秒 * @param date * @return */ public static Date getMonthEnd(Date date) { if (date == null) { return null; } Calendar start = Calendar.getInstance(); start.setTime(date); start.set(Calendar.MONTH, start.get(Calendar.MONTH) + 1); start.set(Calendar.DAY_OF_MONTH, 1); start.set(Calendar.HOUR, 0); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); return start.getTime(); } /** * 获取某个时间所在月份的第一天凌晨 * @param date * @return */ public static Date getMonthStart(Date date) { if (date == null) { return null; } Calendar start = Calendar.getInstance(); start.setTime(date); start.set(Calendar.DAY_OF_MONTH, 1); start.set(Calendar.HOUR, 0); start.set(Calendar.MINUTE, 0); start.set(Calendar.SECOND, 0); return start.getTime(); } /** * 获取今天凌晨 * @return */ public static Date getMorning() { return getMorning(new Date()); } /** * 获取指定时间当天的凌晨 * @param date 给定时间当天的凌晨 * @return */ public static Date getMorning(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); return c.getTime(); } /** * 获取当前时间N天后的凌晨 */ public static Date getMorningNextDate(int n) { Calendar now = Calendar.getInstance(); now.set(Calendar.DATE, now.get(Calendar.DATE) + n); //设置时间向前进n天 now.set(Calendar.HOUR_OF_DAY, 0); now.set(Calendar.MINUTE, 0); now.set(Calendar.SECOND, 0); return now.getTime(); } /** * 系统当前时间过N个月后的时间 * @param nextStep 月份偏移量 * @return */ public static Date getNextMonth(int nextStep) { Calendar c = Calendar.getInstance(); int m = c.get(Calendar.MONTH); c.set(Calendar.MONTH, m + nextStep); return c.getTime(); } /** * 计算给定时间推进一个月对应的时间 * @param date 给定时间 * @return 某时间过一个月后所在的时间 */ public static Date getNextMonthToday(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); c.set(Calendar.MONTH, c.get(Calendar.MONTH) + 1); return c.getTime(); } /** * 获取系统当前时间所在的年份 * @return */ public static int getYear() { return Calendar.getInstance().get(Calendar.YEAR); } /** * 获取给定时间所在的年份 * @param date 时间 * @return 时间所在的年份 */ public static int getYear(Date date) { Calendar c = Calendar.getInstance(); c.setTime(date); return c.get(Calendar.YEAR); } /** * 获取某年分的最后一天结束的时间 * @param year 年份 * @return 指定年份的最后一天结束 */ public static Date getYearEnd(int year) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, Calendar.DECEMBER); c.set(Calendar.DAY_OF_MONTH, 31); c.set(Calendar.HOUR_OF_DAY, 23); c.set(Calendar.MINUTE, 59); c.set(Calendar.SECOND, 59); return c.getTime(); } /** * 获取某年份的第一天凌晨 * @param year 年份 * @return 指定年份的第一天凌晨 */ public static Date getYearStart(int year) { Calendar c = Calendar.getInstance(); c.set(Calendar.YEAR, year); c.set(Calendar.MONTH, Calendar.JANUARY); c.set(Calendar.DAY_OF_MONTH, 1); c.set(Calendar.HOUR_OF_DAY, 0); c.set(Calendar.MINUTE, 0); c.set(Calendar.SECOND, 0); return c.getTime(); } }
工具类三:
import static java.util.Calendar.HOUR_OF_DAY; import static java.util.Calendar.MILLISECOND; import static java.util.Calendar.MINUTE; import static java.util.Calendar.SECOND; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.List; public class DateUtil extends org.apache.commons.lang.time.DateUtils { /** * 默认的日期格式化样式 */ public static final String DAY_PATTERN = “yyyy - MM - dd”; /** * 默认的时间格式化样式 */ public static final String TIME_PATTERN = “HH: mm: ss”; /** * 将Date格式化成符合默认格式的字符串 * * @param date * @return 返回样例:2012-03-29 14:32:23 */ public static String format(Date date) { SimpleDateFormat formatTool = new SimpleDateFormat(); formatTool.applyPattern(DAY_PATTERN + ”” +TIME_PATTERN); return formatTool.format(date); } /** * 将Date格式化成符合默认日期格式的字符串 * * @param date * @return 返回样例:2012-03-29 */ public static String formatDate(Date date) { SimpleDateFormat formatTool = new SimpleDateFormat(); formatTool.applyPattern(DAY_PATTERN); return formatTool.format(date); } /** * 将Date格式化成符合默认时间格式的字符串 * * @param date * @return 返回样例:14:32:23 */ public static String formatTime(Date date) { SimpleDateFormat formatTool = new SimpleDateFormat(); formatTool.applyPattern(TIME_PATTERN); return formatTool.format(date); } /** * 按照pattern格式格式化Date * * @param date * @param pattern * 样例: yyyy/MM/dd * @return 返回样例:2012/03/29 */ public static String format(Date date, String pattern) { SimpleDateFormat formatTool = new SimpleDateFormat(); formatTool.applyPattern(pattern); return formatTool.format(date); } /** * 将符合默认格式的字符串转换成Date * * @param dateValue * 样例:2012-03-29 14:32:23 * @return * @throws ParseException */ public static Date parse(String dateValue) throws ParseException { SimpleDateFormat formatTool = new SimpleDateFormat(); formatTool.applyPattern(DAY_PATTERN + ”” +TIME_PATTERN); return formatTool.parse(dateValue); } /** * 将符合默认格式的日期字符串转换成Date * * @param dateValue * 样例:2012-03-29 * @return * @throws ParseException */ public static Date parseDate(String dateValue) throws ParseException { SimpleDateFormat formatTool = new SimpleDateFormat(); formatTool.applyPattern(DAY_PATTERN); return formatTool.parse(dateValue); } /** * 将符合pattern格式的dateValue转换成Date * * @param dateValue * 样例:2012/03/29 * @param pattern * 样例:yyyy/MM/dd * @return * @throws ParseException */ public static Date parse(String dateValue, String pattern) throws ParseException { SimpleDateFormat formatTool = new SimpleDateFormat(); formatTool.applyPattern(pattern); return formatTool.parse(dateValue); } /** * 返回这一天的最早的时候 * * @param date * @return */ public static Date getEarliest(Date date) { return parseTime(date, 0, 0, 0, 0); } /** * 返回这一天的最晚时候 * * @param date * @return */ public static Date getLastest(Date date) { return parseTime(date, 23, 59, 59, 999); } /** * 得到指定月的天数 * * @param year * @param month * @return */ public static int getMonthLastDay(int year, int month) { Calendar a = Calendar.getInstance(); a.set(Calendar.YEAR, year); a.set(Calendar.MONTH, month– 1); a.set(Calendar.DATE, 1); // 把日期设置为当月第一天 a.roll(Calendar.DATE, -1);// 日期回滚一天,也就是最后一天 int maxDate = a.get(Calendar.DATE); return maxDate; } /** * 返回指定时间加上num天后的时间 * * @param date * @param num * @return */ public static Date add(Date date, int num) { Calendar a = Calendar.getInstance(); a.setTime(date); a.add(Calendar.DAY_OF_MONTH, num); return a.getTime(); } /** * 返回false:date=null,date是1970年;其它都返回true * * @param date * @return */ public static boolean isNotEmpty(Date date) { if (date != null) { Calendar a = Calendar.getInstance(); a.setTime(date); return a.get(Calendar.YEAR) != 1970; } return Boolean.FALSE; } /** * 获得date的小时数0-23 * * @param date * @return */ public static int getHours(Date date) { Calendar a = Calendar.getInstance(); a.setTime(date); return a.get(Calendar.HOUR_OF_DAY); } /** * 获得date是一周的第几天,注意:周日 返回 1,周六 返回 7 * * @param date * @return */ public static int getDay(Date date) { Calendar a = Calendar.getInstance(); a.setTime(date); return a.get(Calendar.DAY_OF_WEEK); } /** * 设定date的时间细节 * * @param date * 要设定时间细节的date * @param hourOfDay * 0-23 * @param minute * 0-59 * @param second * 0-59 * @param milliSecond * 0-999 * @return */ public static Date parseTime(Date date, int hourOfDay, int minute, int second, int milliSecond) { Calendar cal = Calendar.getInstance(); cal.setTime(date); setCalendarTime(cal, hourOfDay, minute, second, milliSecond); return cal.getTime(); } /** * 设定date的时间细节 * * @param date * 要设定时间细节的date * @param timeDetail * 以:号分隔的24小时制的时间,例:16:23:42:267 或 16(等同于16:00:00:000) * @return */ public static Date parseTime(Date date, String timeDetail) { List < String > strList = new ArrayList < String > (); strList.addAll(Arrays.asList(timeDetail.split(“: ”))); while (strList.size() < 4) { strList.add(“0″); } return parseTime(date, Integer.parseInt(strList.get(0)), Integer.parseInt(strList.get(1)), Integer.parseInt(strList.get(2)), Integer.parseInt(strList.get(3))); } /** * 指定时间 是否在 当前时间 之后,注:和日期无关 * * @param time * 指定的时间, 传入样例:16:23:42:267 或 16(等同于16:00:00:000) * @return */ public static boolean isAfterTime(String time) { Date date = parseTime(new Date(), time); return date.after(new Date()); } /** * 指定时间 是否在 当前时间 之前,注:和日期无关 * * @param time * 指定的时间, 传入样例:16:23:42:267 或 16(等同于16:00:00:000) * @return */ public static boolean isBeforeTime(String time) { Date date = parseTime(new Date(), time); return date.before(new Date()); } private static void setCalendarTime(Calendar cal, int hourOfDay, int minute, int second, int milliSecond) { cal.set(HOUR_OF_DAY, hourOfDay); cal.set(MINUTE, minute); cal.set(SECOND, second); cal.set(MILLISECOND, milliSecond); } }
ok!