Date 工具类(包含常用的一些时间方法)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Date 工具类(包含常用的一些时间方法)相关的知识,希望对你有一定的参考价值。
package com.fh.util; import java.sql.Timestamp; 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.GregorianCalendar; import java.util.List; /** * 日期处理工具函数包,包括日期对象、日期字符串相关转换函数 * * @version 1.0 <br> */ public class DateUtils { private final static SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); private final static SimpleDateFormat sdfDay = new SimpleDateFormat( "yyyy-MM-dd"); private final static SimpleDateFormat sdfDays = new SimpleDateFormat( "yyyyMMdd"); private final static SimpleDateFormat sdfTime = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss"); /** * 获取YYYY格式 * * @return */ public static String getYear() { return sdfYear.format(new Date()); } /** * 获取YYYY-MM-DD格式 * * @return */ public static String getDay() { return sdfDay.format(new Date()); } /** * 获取YYYYMMDD格式 * * @return */ public static String getDays() { return sdfDays.format(new Date()); } /** * 获取YYYY-MM-DD HH:mm:ss格式 * * @return */ public static String getTime() { return sdfTime.format(new Date()); } /** * @Title: compareDate * @Description: TODO(日期比较,如果s>=e 返回true 否则返回false) * @param s * @param e * @return boolean * @throws * @author luguosui */ public static boolean compareDate(String s, String e) { if (fomatDate(s) == null || fomatDate(e) == null) { return false; } return fomatDate(s).getTime() >= fomatDate(e).getTime(); } /** * 格式化日期 * * @return */ public static Date fomatDate(String date) { DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); try { return fmt.parse(date); } catch (ParseException e) { e.printStackTrace(); return null; } } /** * 校验日期是否合法 * * @return */ public static boolean isValidDate(String s) { DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); try { fmt.parse(s); return true; } catch (Exception e) { // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对 return false; } } /** * * @Description 获得时间年差 * @param startTime * @param endTime * @return */ public static int getDiffYear(String startTime, String endTime) { DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); try { int years = (int) (((fmt.parse(endTime).getTime() - fmt.parse( startTime).getTime()) / (1000 * 60 * 60 * 24)) / 365); return years; } catch (Exception e) { // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对 return 0; } } /** * * @Description 获得时间分钟差 * @param startTime * @param endTime * @return */ public static int getDiffMinute(String startTime, String endTime) { DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { int minute = (int) ((fmt.parse(endTime).getTime() - fmt.parse( startTime).getTime()) / 1000); return minute; } catch (Exception e) { // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对 return 0; } } /** * <li>功能描述:时间相减得到天数 * * @param beginDateStr * @param endDateStr * @return long * @author Administrator */ public static long getDaySub(String beginDateStr, String endDateStr) { long day = 0; java.text.SimpleDateFormat format = new java.text.SimpleDateFormat( "yyyy-MM-dd"); java.util.Date beginDate = null; java.util.Date endDate = null; try { beginDate = format.parse(beginDateStr); endDate = format.parse(endDateStr); } catch (ParseException e) { e.printStackTrace(); } day = (endDate.getTime() - beginDate.getTime()) / (24 * 60 * 60 * 1000); // System.out.println("相隔的天数="+day); return day; } /** * 得到n天之后的日期 * * @param days * @return */ public static String getAfterDayDate(String days) { int daysInt = Integer.parseInt(days); Calendar canlendar = Calendar.getInstance(); // java.util包 canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 Date date = canlendar.getTime(); SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = sdfd.format(date); return dateStr; } /** * 得到n天之后是周几 * * @param days * @return */ public static String getAfterDayWeek(String days) { int daysInt = Integer.parseInt(days); Calendar canlendar = Calendar.getInstance(); // java.util包 canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 Date date = canlendar.getTime(); SimpleDateFormat sdf = new SimpleDateFormat("E"); String dateStr = sdf.format(date); return dateStr; } /** * 定义常见的时间格式 */ private static String[] dateFormat = { "yyyy-MM-dd HH:mm:ss", "yyyy/MM/dd HH:mm:ss", "yyyy年MM月dd日HH时mm分ss秒", "yyyy-MM-dd", "yyyy/MM/dd", "yy-MM-dd", "yy/MM/dd", "yyyy年MM月dd日", "HH:mm:ss", "yyyyMMddHHmmss", "yyyyMMdd", "yyyy.MM.dd", "yy.MM.dd", "MM月dd日HH时mm分", "yyyy年MM月dd日 HH:mm:ss", "yyyy-MM-dd HH:mm" }; /** * <p> * <b>作者:</b>zy * </p> * <p> * <b>日期:</b>2011-9-8 * </p> * <p> * <b>方法描述:</b> 将日期格式从 java.util.Calendar 转到 java.sql.Timestamp 格式 * </p> * * @param date * 格式表示的日期 * @return <p> * <b>使用说明:</b> * </p> */ public static Timestamp convUtilCalendarToSqlTimestamp(Calendar date) { if (date == null) return null; else return new Timestamp(date.getTimeInMillis()); } /** * <p> * <b>作者:</b>zy * </p> * <p> * <b>日期:</b>2011-9-8 * </p> * <p> * <b>方法描述:</b> 将日期格式从 java.util.Timestamp 转到 java.util.Calendar 格式 * </p> * * @param date * 格式表示的日期 * @return <p> * <b>使用说明:</b> * </p> */ public static Calendar convSqlTimestampToUtilCalendar(Timestamp date) { if (date == null) return null; else { java.util.GregorianCalendar gc = new java.util.GregorianCalendar(); gc.setTimeInMillis(date.getTime()); return gc; } } /** * <p> * <b>作者:</b>zy * </p> * <p> * <b>日期:</b>2011-9-8 * </p> * <p> * <b>方法描述:</b> 解析一个字符串,形成一个Calendar对象,适应各种不同的日期表示法 * </p> * * @param dateStr * 期望解析的字符串,注意,不能传null进去,否则出错 * @return <p> * <b>使用说明:</b> <br> * <br> * 可输入的日期字串格式如下: <br> * "yyyy-MM-dd HH:mm:ss", <br> * "yyyy/MM/dd HH:mm:ss", <br> * "yyyy年MM月dd日HH时mm分ss秒", <br> * "yyyy-MM-dd", <br> * "yyyy/MM/dd", <br> * "yy-MM-dd", <br> * "yy/MM/dd", <br> * "yyyy年MM月dd日", <br> * "HH:mm:ss", <br> * "yyyyMMddHHmmss", <br> * "yyyyMMdd", <br> * "yyyy.MM.dd", <br> * "yy.MM.dd" * </p> */ public static Calendar parseDate(String dateStr) { if (dateStr == null || dateStr.trim().length() == 0) return null; Date result = parseDate(dateStr, 0); Calendar cal = Calendar.getInstance(); cal.setTime(result); return cal; } /** * <p> * <b>作者:</b>zy * </p> * <p> * <b>日期:</b>2011-9-8 * </p> * <p> * <b>方法描述:</b> 将一个日期转成日期时间格式,格式这样 2002-08-05 21:25:21 * </p> * * @param date * 期望格式化的日期对象 * @return 返回格式化后的字符串 * <p> * <b>使用说明:</b> <br> * Calendar date = new GregorianCalendar(); <br> * String ret = DateUtils.toDateTimeStr(date); <br> * 返回: <br> * ret = "2002-12-04 09:13:16"; * </p> */ public static String toDateTimeStr(Calendar date) { if (date == null) return null; return new SimpleDateFormat(dateFormat[0]).format(date.getTime()); } /** * <p> * <b>作者:</b>zy * </p> * <p> * <b>日期:</b>2011-9-8 * </p> * <p> * <b>方法描述:</b> 将一个日期转成日期时间格式 * </p> * * @param format * 日志格式序号 * @param date * 期望格式化的日期对象 * @return <p> * <b>使用说明:</b> * </p> */ public static String toDateTimeStr(int format, Calendar date) { if (date == null) return null; return new SimpleDateFormat(dateFormat[format]).format(date.getTime()); } /** * <p> * <b>作者:</b>zy * </p> * <p> * <b>日期:</b>2011-9-8 * </p> * <p> * <b>方法描述:</b> 将一个日期转成日期格式, 格式:yyyy-MM-dd * </p> * * @param date * 期望格式化的日期对象 * @return 返回格式化后的字符串 * <p> * <b>使用说明:</b> * </p> */ public static String toDateStr(Calendar date) { if (date == null) return null; return new SimpleDateFormat(dateFormat[3]).format(date.getTime()); } /** * <p> * <b>作者:</b>zy * </p> * <p> * <b>日期:</b>2011-9-8 * </p> * <p> * <b>方法描述:</b> 根据format数组的序号,将Calendar转换为对应格式的String * </p> * * @param date * 要转换的日期对象 * @param formatIndex * format数组中的索引 * @return 返回格式化后的字符串 * <p> * <b>使用说明:</b> * </p> */ public static String toDateStrByFormatIndex(Calendar date, int formatIndex) { if (date == null) return null; return new SimpleDateFormat(dateFormat[formatIndex]).format(date .getTime()); } /** * <p> * <b>作者:</b>zy * </p> * <p> * <b>日期:</b>2011-9-8 * </p> * <p> * <b>方法描述:</b> 第一个日期与第二个日期相差的天数 * </p> * * @param d1 * 第一个日期 * @param d2 * 第二个日期 * @return 两个日期之间相差的天数 * <p> * <b>使用说明:</b> * </p> */ public static int calendarMinus(Calendar d1, Calendar d2) { if (d1 == null || d2 == null) { return 0; } d1.set(Calendar.HOUR_OF_DAY, 0); d1.set(Calendar.MINUTE, 0); d1.set(Calendar.SECOND, 0); d2.set(Calendar.HOUR_OF_DAY, 0); d2.set(Calendar.MINUTE, 0); d2.set(Calendar.SECOND, 0); long t1 = d1.getTimeInMillis(); long t2 = d2.getTimeInMillis(); long daylong = 3600 * 24 * 1000; t1 = t1 - t1 % (daylong); t2 = t2 - t2 % (daylong); long t = t1 - t2; int value = (int) (t / (daylong)); return value; } /** * <p> * <b>作者:</b>zy * </p> * <p> * <b>日期:</b>2011-9-8 * </p> * <p> * <b>方法描述:</b> 第一个日期与第二个日期相差的天数 * </p> * * @param d1 * 第一个日期 * @param d2 * 第二个日期 * @return 两个日期之间相差的天数 * <p> * <b>使用说明:</b> * </p> */ public static long calendarminus(Calendar d1, Calendar d2) { if (d1 == null || d2 == null) { return 0; } return (d1.getTimeInMillis() - d2.getTimeInMillis()) / (3600 * 24000); } /** * <p> * <b>作者:</b>zy * </p> * <p> * <b>日期:</b>2011-9-8 10:00:00 * </p> * <p> * <b>方法描述:</b> 第一个日期与第二个日期相差的秒数 * </p> * * @param d1 * 第一个日期 * @param d2 * 第二个日期 * @return 两个日期之间相差的秒数 * <p> * <b>使用说明:</b> * </p> */ public static long calendarTime(Calendar d1, Calendar d2) { if (d1 == null || d2 == null) { return 0; } return (d1.getTimeInMillis() - d2.getTimeInMillis()) / 1000; } /** * <p> * <b>作者:</b>zy * </p> * <p> * * </p> * <p> * <b>方法描述:</b> 内部方法,根据某个索引中的日期格式解析日期 * </p> * * @param dateStr * 日期的字符串形式 * @param index * 日期格式索引 * @return 符合日期字符串的日期对象 * <p> * <b>使用说明:</b> * </p> */ public static Date parseDate(String dateStr, int index) { DateFormat df = null; try { df = new SimpleDateFormat(dateFormat[index]); return df.parse(dateStr); } catch (Exception aioe) { return null; } } /** * <p> * <b>作者:</b>zy * </p> * <p> * * </p> * <p> * <b>方法描述:</b> 字符转日期,字符串格式:"yyyy-MM-dd",例如2006-01-01 * </p> * * @param dateStr * 日期的字符串形式 * @return 符合日期字符串的日期对象 * <p> * <b>使用说明:</b> * </p> */ public static Date StringToDate(String dateStr) { if (dateStr == null || dateStr.trim().length() == 0) { return null; } return parseDate(dateStr, 3); } /** * <p> * <b>作者:</b>zy * </p> * <p> * * </p> * <p> * <b>方法描述:</b> 将日期转换为格式化后的日期字符串 * </p> * * @param date * 日期 * @param index * 日期格式索引 * @return <p> * <b>使用说明:</b> * </p> */ public static String dateToString(Date date, int index) { if (date == null) { return null; } return new SimpleDateFormat(dateFormat[index]).format(date); } /** * <p> * <b>作者:</b>zy * </p> * <p> * * </p> * <p> * <b>方法描述:</b> 返回固定格式的日期字符串。转换结果格式为:"yyyy-MM-dd" * </p> * * @param date * 待转换的日期对象 * @return <p> * <b>使用说明:</b> * </p> */ public static String dateToString(Date date) { if (date == null) { return null; } return new SimpleDateFormat(dateFormat[3]).format(date); } /** * @Title: getStartDate * @Description: 获取当前日期,"yyyy-MM-dd 05:00:00" * @param @return 设定文件 * @return String 返回类型 * @throws */ public static String getStartDate() { String startTime = new SimpleDateFormat(dateFormat[3]) .format(new Date()); startTime = startTime + " 05:00:00"; return startTime; } /** * @Title: getDate * @Description: 获取当前日期,"yyyy-MM-dd" * @param @return 设定文件 * @return String 返回类型 * @throws */ public static String getDate() { return new SimpleDateFormat(dateFormat[3]).format(new Date()); } /** * @Title: getDateTime * @Description: 获取当前日期,"yyyy-MM-dd HH:mm:ss:SSS" * @param @return 设定文件 * @return String 返回类型 * @throws */ public static String getDateTime() { return new SimpleDateFormat(dateFormat[0]).format(new Date()); } public static String getDateTimeHHMM(String datetime) throws ParseException { return new SimpleDateFormat(dateFormat[15]) .format(new SimpleDateFormat(dateFormat[15]).parse(datetime)); } /** * <p> * <b>作者:</b>zy * </p> * <p> * * </p> * <p> * <b>方法描述:</b> 将日期格式从 java.util.Date 转到 java.sql.Timestamp 格式 * </p> * * @param date * @return <p> * <b>使用说明:</b> * </p> */ public static Timestamp convUtilDateToSqlTimestamp(Date date) { if (date == null) return null; else return new Timestamp(date.getTime()); } /** * <p> * <b>作者:</b>zy * </p> * <p> * * </p> * <p> * <b>方法描述:</b> 将Date对象转换成Calendar对象 * </p> * * @param date * @return <p> * <b>使用说明:</b> * </p> */ public static Calendar convUtilDateToUtilCalendar(Date date) { if (date == null) return null; else { java.util.GregorianCalendar gc = new java.util.GregorianCalendar(); gc.setTimeInMillis(date.getTime()); return gc; } } /** * <p> * <b>作者:</b>zy * </p> * <p> * * </p> * <p> * <b>方法描述:</b> 根据某个索引中的日期格式解析日期 * </p> * * @param dateStr * 日期 * @param index * 日期格式的索引 * @return <p> * <b>使用说明:</b> * </p> */ public static Timestamp parseTimestamp(String dateStr, int index) { DateFormat df = null; try { df = new SimpleDateFormat(dateFormat[index]); return new Timestamp(df.parse(dateStr).getTime()); } catch (ParseException pe) { return new Timestamp(parseDate(dateStr, index + 1).getTime()); } catch (ArrayIndexOutOfBoundsException aioe) { return null; } } /** * <p> * <b>作者:</b>zy * </p> * </p> * <p> * <b>方法描述:</b> 返回固定格式的日期字符串。转换结果格式为:"yyyy-MM-dd" * </p> * * @param date * 待转换的日期对象 * @return <p> * <b>使用说明:</b> * </p> */ public static Timestamp parseTimestamp(String dateStr) { DateFormat df = null; try { df = new SimpleDateFormat(dateFormat[3]); return new Timestamp(df.parse(dateStr).getTime()); } catch (ParseException pe) { return null; } catch (ArrayIndexOutOfBoundsException aioe) { return null; } } /** * @Title: calculateCalendarByday * @Description: 日期加减天数 * @param calendar * @param days * @return Calendar 返回类型 */ public static Calendar calculateCalendarByday(Calendar calendar, int days) { calendar.add(Calendar.DAY_OF_MONTH, days); return calendar; } /** * 获取倒计时 * * @param countdownTime * 倒计时的时间,格式:yyyy-MM-dd HH:mm:ss * @return String 为null时转换失败 倒计时够天数显示天数,不够显示小时,不够小时显示分钟 * 2天后面没有1天,而是24小时,2小时同理 */ public static String getCountdownTime(String countdownTime) { try { Calendar c = Calendar.getInstance(); c.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .parse(countdownTime));// 将字符串转换为可获取毫秒数的日期类型 long nowDate = System.currentTimeMillis(); long countdown = (c.getTimeInMillis() - nowDate) / (1000 * 60);// 获取倒计时(分钟) long days = countdown / (60 * 24);// 天 long hours = countdown / 60 % 24;// 小时 long mins = countdown % 60;// 分钟 if (days > 0) { return (days + 1) + "天"; } if (hours > 0) { return (hours + 1) + "小时"; } if (mins > 0) { return mins + "分钟"; } return "0分钟"; } catch (ParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } /** * 获取时间节点是在当前时间节点多长时间以前 * * @param oldTime * 之前的时间,格式:yyyy-MM-dd HH:mm:ss * @return String 为null时转换失败 倒计时够天数显示天数,不够显示小时,不够小时显示分钟 */ public static String getDiffTimeLessNow(String oldTime) { try { Calendar c = Calendar.getInstance(); c.setTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss") .parse(oldTime));// 将字符串转换为可获取毫秒数的日期类型 long nowDate = System.currentTimeMil以上是关于Date 工具类(包含常用的一些时间方法)的主要内容,如果未能解决你的问题,请参考以下文章