Java操作Date的工具类

来源:互联网 发布:网络层的4个功能 编辑:程序博客网 时间:2024/06/06 11:45
import java.sql.Timestamp;import java.text.DateFormat;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.Map;import java.util.TimeZone;/** * 日期处理 *  * @vesion 1.0 */public class DateUtil{private final static String DATE_AND_TIME_FORMAT = "yyyy-MM-dd HH:mm:ss";private final static String DATE_AND_TIME_MS_FORMAT = "yyyy-MM-dd HH:mm:ss.SSS";private final static String TIME_FORMAT = "HH:mm:ss";private final static String MM_DD_YYYY_FORMAT = "yyyy-MM-dd";private final static String DATE_WITHOUT_SEPARATOR_FORMAT = "yyyyMMdd";private final static String DATE_WITH_SEPARATOR_FORMAT = "yyyy-MM-dd";private final static String DATE_YEAR_AND_MONTH_WITH_SEPARATOR_FORMAT = "yyyy-MM";private final static String DATE_YEAR_AND_MONTH_WITH_CHINESE_FORMAT = "yyyy年MM月";private final static String DATETIME_WITHOUT_SEPARATOR_FORMAT = "yyyyMMddHHmmss";private final static String DATETIME_WITHOUT_SEPARATOR_FORMAT_SPACE = "yyyyMMdd HHmmss";private final static String MM_DD_AND_HH_MM = "MM月dd日 HH:mm";// 定义时间日期显示格式private final static String DATE_FORMAT = "yyyy-MM-dd";/** * 获得timestamp类型的当前系统日期 *  * @return */public Timestamp getDateTime(){return new Timestamp(new Date().getTime());}/** * 获取当前系统日期前一日的日期 *  * @desc * @return * @author yang.jianqi * @date 2016-3-2 11:33:05 * @version 1.0 */public static Date getYesterDayStr(){Calendar cal = Calendar.getInstance();cal.add(Calendar.DAY_OF_YEAR, -1);return cal.getTime();}/** * 把形如"2012-12-21";的字符串转换成时间 *  * @desc * @param mmDDYYYStr * @return * @author yang.shuai * @date 2011-12-16 下午03:05:00 * @version 1.0 */public static Date getDateFromDateStr(String dateStr){SimpleDateFormat insdf = new SimpleDateFormat(MM_DD_YYYY_FORMAT);try{if (dateStr == null || dateStr.trim().isEmpty()){return null;}return insdf.parse(dateStr);} catch (ParseException e){// TODO Auto-generated catch blocke.printStackTrace();return null;}}/** * 把形如"20121221";的字符串转换成时间 *  * @desc * @param mmDDYYYStr * @return * @author yang.jianqi * @date 2016-3-2 10:31:44 * @version 1.0 */public static Date getDateWithoutSeparatorFromDateStr(String dateStr){SimpleDateFormat insdf = new SimpleDateFormat(DATE_WITHOUT_SEPARATOR_FORMAT);try{if (dateStr == null || dateStr.trim().isEmpty()){return null;}return insdf.parse(dateStr);} catch (ParseException e){// TODO Auto-generated catch blocke.printStackTrace();return null;}}/** * 把形如"2012-02";的字符串转换成时间 *  * @param dateStr * @return */public static Date getDateFromDateTimeYearMonthStr(String dateStr){SimpleDateFormat insdf = new SimpleDateFormat(DATE_YEAR_AND_MONTH_WITH_SEPARATOR_FORMAT);try{if ((dateStr == null) || (dateStr.trim().isEmpty())){return null;}return insdf.parse(dateStr);} catch (ParseException e){e.printStackTrace();}return null;}/** * 把形如"2012-12-21 10:24:30";的字符串转换成时间 *  * @param dateStr * @return */public static Date getDateFromDateTimeStr(String dateStr){SimpleDateFormat insdf = new SimpleDateFormat(DATE_AND_TIME_FORMAT);try{if ((dateStr == null) || (dateStr.trim().isEmpty())){return null;}return insdf.parse(dateStr);} catch (ParseException e){e.printStackTrace();}return null;}/** * 把形如"20121221 102430";的字符串转换成时间 *  * @param dateStr * @return */public static Date getDateFromDateTimeSpaceWithoutSeparator(String dateStr){SimpleDateFormat insdf = new SimpleDateFormat(DATETIME_WITHOUT_SEPARATOR_FORMAT_SPACE);try{if ((dateStr == null) || (dateStr.trim().isEmpty())){return null;}return insdf.parse(dateStr);} catch (ParseException e){e.printStackTrace();}return null;}/** * 把形如"20121221102430";的字符串转换成时间 *  * @param dateStr * @return */public static Date getDateFromDateTimeWithoutSeparator(String dateStr){SimpleDateFormat insdf = new SimpleDateFormat(DATETIME_WITHOUT_SEPARATOR_FORMAT);try{if ((dateStr == null) || (dateStr.trim().isEmpty())){return null;}return insdf.parse(dateStr);} catch (ParseException e){e.printStackTrace();}return null;}/** * 根据参数获得java.sql.Date类型 dateTime为需要转换的日期参数,pattern为转换格式。 方法调用: * getDateTime("",Util.DEFAULT_DATE_PATTERN_All),则按默认时间格式输出,格式如下 * <code>yyyy-MM-dd HH:mm:ss</code> *  * @param dateTime * @param pattern * @return java.sql.Date */public static Date getDateTime(String dateTime, String pattern){DateFormat dateFormat = getSimpleDateFormat(pattern);Date date = null;try{date = dateFormat.parse(dateTime);} catch (Exception e){// e.printStackTrace();return null;}return date;}/** * 根据参数获得java.sql.Date类型 根据年、月、日参数和pattern指定的转换格式,返回对应的日期字符串。 方法调用: * getDateTime(Util.DEFAULT_DATE_PATTERN_All,2010,6,10),则按默认时间格式输出内容如下 * <code>2010-06-10 00:00:00</code> *  * @param pattern * @param year *            年 * @param month *            月 * @param date *            日 * @return java.sql.Date */public static String getDateTime(String pattern, int year, int month,int date){DateFormat df = getSimpleDateFormat(pattern);Calendar c = Calendar.getInstance();c.set(year, month - 1, date);return df.format(c.getTime());}/** * 根据指定日期转换格式获得对应日期的时间字符串 *  * @param pattern * @param dateTime * @return String */public String getDateTime(String pattern, Object dateTime){return getSimpleDateFormat(pattern).format(dateTime);}/** * 获取Date类型的全字符串表示格式 例子:d => yyyy-MM-dd HH:mm:ss *  * @desc * @param d * @return * @author yang.shuai * @date 2011-11-8 下午02:57:27 * @version 1.0 */public static String getDateTimeStr(Date d){if (d == null){return "";}final SimpleDateFormat insdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return insdf.format(d);}/** * 获取Date类型的全字符串表示格式 例子:d => yyyy-MM-dd *  * @desc * @param d * @return * @author yang.shuai * @date 2011-11-8 下午02:57:27 * @version 1.0 */public static String getDateStr(Date d){if (d == null){return "";}final SimpleDateFormat insdf = new SimpleDateFormat("yyyy-MM-dd");return insdf.format(d);}/** * 获取String类型的全字符串表示格式 例子:d => yyyy-MM-dd *  * @param d * @return */public static String getString2DateStr(String d){Date date = null;if (d == null){return "";} else{SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");// 小写的mm表示的是分钟try{date = sdf.parse(d);} catch (ParseException e){// TODO Auto-generated catch blocke.printStackTrace();}}SimpleDateFormat insdf = new SimpleDateFormat("yyyy-MM-dd");return insdf.format(date);}/** * 获得 java.text.SimpleDateFormat *  * @param pattern * @return */public static SimpleDateFormat getSimpleDateFormat(String pattern){return new SimpleDateFormat(pattern);}/** * 获得指定日期格式的指定日期时间范围内的所有日期。 *  * @param pattern *            指定日期格式,若参数默认为Util.DEFAULT_DATE_PATTERN_YEAR_MONTH_DATE * @param startdate *            开始时间 * @param enddate *            结束时间 * @return String[] */public static String[] getHotelDate(String pattern, String startdate,String enddate){SimpleDateFormat f = new SimpleDateFormat(pattern);try{Date d1 = f.parse(startdate);Date d2 = f.parse(enddate);long days = (d2.getTime() - d1.getTime()) / 3600000 / 24;Calendar startcal = Calendar.getInstance();Calendar endcal = Calendar.getInstance();startcal.setTime(d1);endcal.setTime(d2);String hotelDate[] = new String[(int) days + 1];hotelDate[0] = f.format(d1);int i = 1;while (endcal.after(startcal)){if (i <= days)startcal.add(Calendar.DATE, 1);hotelDate[i] = f.format(startcal.getTime());i++;}return hotelDate;} catch (ParseException e){e.printStackTrace();}return null;}/** * 获得当前日期为每周的第几天 *  * @param pattern * @param dateTime * @return */public static int getDayOfWeek(String pattern, String dateTime){Date date = null;try{date = getSimpleDateFormat(pattern).parse(dateTime);} catch (ParseException e){// logger.error("解析日期格式错误,错误信息为:" + e.getMessage());}Calendar calendar = Calendar.getInstance();calendar.setTime(date);int weekOfDay = calendar.get(Calendar.DAY_OF_WEEK);if (weekOfDay == 1){weekOfDay = 7;return weekOfDay;}return weekOfDay - 1;}/** * 根据参数,获得几天后的日期 *  * @param pattern *            日期解析类型 * @param dateTime *            需要转换的日期 * @return */public Date getDateAfter(String pattern, Date dateTime){int defaultDate = 7;Calendar now = Calendar.getInstance();now.setTime(dateTime);now.set(Calendar.DATE, now.get(Calendar.DATE) + defaultDate);return now.getTime();}/** * 根据参数,获得几天前的日期 *  * @param pattern *            日期解析类型 * @param dateTime *            需要转换的日期 * @param defaultDate *            天数 * @author zhu.yiming * @date 2016-8-25 15:02:00 * @version 1.0 * @return */public static Date getDateBefore(Date dateTime, int defaultDate){Calendar now = Calendar.getInstance();now.setTime(dateTime);now.set(Calendar.DATE, now.get(Calendar.DATE) - defaultDate);return now.getTime();}/** * 根据参数,获得后几天前的日期 *  * @param pattern *            日期解析类型 * @param dateTime *            需要转换的日期 * @param defaultDate *            天数 * @author zhu.yiming * @date 2016-8-25 15:02:00 * @version 1.0 * @return */public static Date getDateAfter(Date dateTime, int defaultDate){Calendar now = Calendar.getInstance();now.setTime(dateTime);now.set(Calendar.DATE, now.get(Calendar.DATE) + defaultDate);return now.getTime();}/** * 根据当前系统时间获取零点和二十四点的时间 *  * @author zhu.yiming * @date 2016-8-25 15:03:00 * @version 1.0 * @return * @remark 对于20161026这样格式的日期 zeroDate获取到2016-10-25 00:00:00 */public static Map getZeroDateAndTwelveDate(long current){long zero = current / (1000 * 3600 * 24) * (1000 * 3600 * 24)- TimeZone.getDefault().getRawOffset();// 今天零点零分零秒的毫秒数long twelve = zero + 24 * 60 * 60 * 1000 - 1;// 今天23点59分59秒的毫秒数Map<String, Date> dateMap = new HashMap<String, Date>();dateMap.put("zeroDate", new Date(zero));dateMap.put("twelveDate", new Date(twelve));return dateMap;}/** * 获得当前日期是每周的周几 *  * @return String */public String getCurrentDayofWeek(){StringBuffer sb = new StringBuffer();DateFormat dateFormat = getSimpleDateFormat("yyyy-MM-dd");String dateTime = dateFormat.format(new Date());int sIndex = dateTime.indexOf("-");int eIndex = dateTime.lastIndexOf("-");String year = dateTime.substring(0, sIndex);String month = dateTime.substring(sIndex + 1, eIndex);String day = dateTime.substring(eIndex + 1, dateTime.length());sb.append("日期:");sb.append(year + "年");sb.append(month + "月");sb.append(day + "日");int temp = getDayOfWeek("yyyy-MM-dd", dateTime);if (temp == 0){sb.append(" 周日");} else{switch (temp - 1){case 1:sb.append(" 周一");break;case 2:sb.append(" 周二");break;case 3:sb.append(" 周三");break;case 4:sb.append(" 周四");break;case 5:sb.append(" 周五");break;case 6:sb.append(" 周六");break;default:break;}}return sb.toString();}/** * 获得当前日期周的周一 *  * @return */public String getCurrentMonday(){int mondayPlus = getMondayPlus();GregorianCalendar currentDate = new GregorianCalendar();currentDate.add(GregorianCalendar.DATE, mondayPlus);Date monday = currentDate.getTime();SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date modayDate = null;try{modayDate = dateFormat.parse(dateFormat.format(monday));} catch (ParseException e){// logger.error("解析日期格式错误,错误信息为:" + e.getMessage());}return dateFormat.format(modayDate);}/** * 获得当前日期与本周一相差的天数 *  * @return */private int getMondayPlus(){Calendar cd = Calendar.getInstance();int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK);if (dayOfWeek == 1){return -6;} else{return 2 - dayOfWeek;}}/** * 得到格式化后的时间,格式为yyyy-MM-dd HH:mm:ss,如2006-02-15 15:23:45 *  * @param currDate *            要格式化的时间 * @see #getFormatDateTime(java.util.Date, String) * @return String 返回格式化后的时间,默认格式为yyyy-MM-dd HH:mm:ss,如2006-02-15 15:23:45 * @author jiang.hao */public static String getFormatDateTime(java.util.Date currDate){return getFormatDate(currDate, DATE_AND_TIME_FORMAT);}/** * 得到格式化后的时间,格式为yyyy-MM-dd HH:mm:ss.SSS,如2006-02-15 15:23:45.000 *  * @param currDate *            要格式化的时间 * @see #getFormatDateTime(java.util.Date, String) * @return String 返回格式化后的时间,默认格式为yyyy-MM-dd HH:mm:ss.SSS,如2006-02-15 *         15:23:45.000 * @author yang.jianqi */public static String getMSFormatDateTime(java.util.Date currDate){return getFormatDate(currDate, DATE_AND_TIME_MS_FORMAT);}public static String getFormatTime(java.util.Date date){return getFormatDate(date, TIME_FORMAT);}public static String getDateWithoutSeparator(java.util.Date date){return getFormatDate(date, DATE_WITHOUT_SEPARATOR_FORMAT);}public static String getDateWithSeparator(java.util.Date date){return getFormatDate(date, DATE_WITH_SEPARATOR_FORMAT);}public static String getDateYearAndMonthWithSeparator(java.util.Date date){return getFormatDate(date, DATE_YEAR_AND_MONTH_WITH_SEPARATOR_FORMAT);}/** * 返回yyyy年MM月格式的字符串 * @param date * @return */public static String getDateYearAndMonthWithChineseSeparator(java.util.Date date){return getFormatDate(date, DATE_YEAR_AND_MONTH_WITH_CHINESE_FORMAT);}public static String getDateTimeWithoutSeparator(java.util.Date date){return getFormatDate(date, DATETIME_WITHOUT_SEPARATOR_FORMAT);}/** * 根据格式得到格式化后的日期 *  * @param currDate *            要格式化的日期 * @param format *            日期格式,如yyyy-MM-dd * @see java.text.SimpleDateFormat#format(java.util.Date) * @return String 返回格式化后的日期,格式由参数<code>format</code> *         定义,如yyyy-MM-dd,如2006-02-15 */public static String getFormatDate(java.util.Date currDate, String format){if (currDate == null){return "";}SimpleDateFormat dtFormatdB = null;try{dtFormatdB = new SimpleDateFormat(format);return dtFormatdB.format(currDate);} catch (Exception e){dtFormatdB = new SimpleDateFormat(DATE_FORMAT);try{return dtFormatdB.format(currDate);} catch (Exception ex){}}return null;}/** * 获得当前日期的该月第一天日期 */@SuppressWarnings("deprecation")public static String getFirstDate(String datetime, String formate){datetime = getDateTimeStr(getDateTime(datetime, DATE_FORMAT));String month = datetime.substring(5, 7);System.out.println(month);return datetime.substring(0, 8) + "01";}/** * 获取月份的最后一天 *  * @param dateTime * @return */public static String getLastDate(String dateTime){String lastday = null;SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");Calendar cale = Calendar.getInstance();try{cale.setTime(sdf.parse(dateTime));cale.add(Calendar.MONTH, 1);cale.set(Calendar.DAY_OF_MONTH, 0);lastday = sdf.format(cale.getTime());} catch (ParseException e1){// TODO Auto-generated catch blocke1.printStackTrace();return null;}return lastday;}/** * 得到格式化后的时间,格式为MM月dd日 HH:mm,如02月15日 15:23 *  * @param currDate *            要格式化的时间 * @see #getFormatDateTime(java.util.Date, String) * @return String 返回格式化后的时间,默认格式为MM月dd日 HH:mm,如02月15日 15:23 * @author jiang.hao */public static String getFormatTradeDateTime(java.util.Date currDate){return getFormatDate(currDate, MM_DD_AND_HH_MM);}/** * 获取该时间的前几个月 *  * @param dateTime * @param defaultMonth * @return */public static Date getDateBeforeByMonth(Date dateTime, int defaultMonth){Calendar c = Calendar.getInstance();c.setTime(dateTime);c.add(Calendar.MONTH, - defaultMonth);return c.getTime();}/** * 获取该时间的后几个月 *  * @param dateTime * @param defaultMonth * @return */public static Date getDateAfterByMonth(Date dateTime, int defaultMonth){Calendar c = Calendar.getInstance();c.setTime(dateTime);c.add(Calendar.MONTH, defaultMonth);return c.getTime();}/** * 获取年份 *  * @param dateTime * @return */public static int getYear(Date dateTime){Calendar c = Calendar.getInstance();c.setTime(dateTime);return c.get(Calendar.YEAR);}/** * 获取月份(第几月) *  * @param dateTime * @return */public static int getMonth(Date dateTime){Calendar c = Calendar.getInstance();c.setTime(dateTime);return c.get(Calendar.MONTH) + 1;}/** * 获取季度(第几季度) *   * @param dateTime * @return */public static int getQuarter(Date dateTime){int month = getMonth(dateTime);return (month -1 + 3)/3;}public static void main(String[] args){long current = System.currentTimeMillis();// 当前时间毫秒数long zero = current / (1000 * 3600 * 24) * (1000 * 3600 * 24)- TimeZone.getDefault().getRawOffset();// 今天零点零分零秒的毫秒数long twelve = zero + 24 * 60 * 60 * 1000;// 今天23点59分59秒的毫秒数System.out.println(getFirstDate("2012-02-06", "yyyy-MM-dd"));System.out.println(new Date(zero));// 今天零点零分零秒System.out.println(new Date(twelve));// 今天23点59分59秒System.out.println(getDateBefore(new Date(), 30));System.out.println(getDateFromDateTimeWithoutSeparator("20170627205549"));}}

原创粉丝点击