| /** | 
|  * Copyright (c) 2015-2016, Chill Zhuang 庄骞 (smallchill@163.com). | 
|  * <p> | 
|  * Licensed under the Apache License, Version 2.0 (the "License"); | 
|  * you may not use this file except in compliance with the License. | 
|  * You may obtain a copy of the License at | 
|  * <p> | 
|  * http://www.apache.org/licenses/LICENSE-2.0 | 
|  * <p> | 
|  * Unless required by applicable law or agreed to in writing, software | 
|  * distributed under the License is distributed on an "AS IS" BASIS, | 
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  * See the License for the specific language governing permissions and | 
|  * limitations under the License. | 
|  */ | 
| package com.dsh.course.util; | 
|   | 
| import org.apache.commons.lang3.StringUtils; | 
| import org.apache.commons.lang3.time.DateFormatUtils; | 
| import org.apache.commons.lang3.time.DateUtils; | 
|   | 
| 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.Objects; | 
| import java.util.TimeZone; | 
|   | 
| public class DateUtil { | 
|   | 
|     private static TimeZone tz = TimeZone.getTimeZone("GMT+8"); | 
|   | 
|     /** | 
|      * 获取YYYY格式 | 
|      */ | 
|     public static String getYear() { | 
|         return formatDate(new Date(), "yyyy"); | 
|     } | 
|   | 
|     /** | 
|      * 获取YYYY格式 | 
|      */ | 
|     public static String getYear(Date date) { | 
|         return formatDate(date, "yyyy"); | 
|     } | 
|   | 
|     /** | 
|      * 获取YYYY-MM-DD格式 | 
|      */ | 
|     public static String getDay() { | 
|         return formatDate(new Date(), "yyyy-MM-dd"); | 
|     } | 
|   | 
|     /** | 
|      * 获取YYYY-MM-DD格式 | 
|      */ | 
|     public static String getDay(Date date) { | 
|         return formatDate(date, "yyyy-MM-dd"); | 
|     } | 
|   | 
|     /** | 
|      * 获取YYYYMMDD格式 | 
|      */ | 
|     public static String getDays() { | 
|         return formatDate(new Date(), "yyyyMMdd"); | 
|     } | 
|   | 
|     /** | 
|      * 获取YYYYMMDD格式 | 
|      */ | 
|     public static String getDays(Date date) { | 
|         return formatDate(date, "yyyyMMdd"); | 
|     } | 
|   | 
|     /** | 
|      * 获取YYYY-MM-DD HH:mm:ss格式 | 
|      */ | 
|     public static String getTime() { | 
|         return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss"); | 
|     } | 
|   | 
|     /** | 
|      * 获取YYYY-MM-DD HH:mm:ss.SSS格式 | 
|      */ | 
|     public static String getMsTime() { | 
|         return formatDate(new Date(), "yyyy-MM-dd HH:mm:ss.SSS"); | 
|     } | 
|   | 
|     /** | 
|      * 获取YYYYMMDDHHmmss格式 | 
|      */ | 
|     public static String getAllTime() { | 
|         return formatDate(new Date(), "yyyyMMddHHmmss"); | 
|     } | 
|   | 
|     /** | 
|      * 获取YYYY-MM-DD HH:mm:ss格式 | 
|      */ | 
|     public static String getTime(Date date) { | 
|         return formatDate(date, "yyyy-MM-dd HH:mm:ss"); | 
|     } | 
|   | 
|     public static String formatDate(Date date, String pattern) { | 
|         String formatDate = null; | 
|         if (StringUtils.isNotBlank(pattern)) { | 
|             formatDate = DateFormatUtils.format(date, pattern); | 
|         } else { | 
|             formatDate = DateFormatUtils.format(date, "yyyy-MM-dd"); | 
|         } | 
|         return formatDate; | 
|     } | 
|   | 
|     /** | 
|      * 日期比较,如果s>=e 返回true 否则返回false) | 
|      * | 
|      * @author luguosui | 
|      */ | 
|     public static boolean compareDate(String s, String e) { | 
|         if (parseDate(s) == null || parseDate(e) == null) { | 
|             return false; | 
|         } | 
|         return parseDate(s).getTime() >= parseDate(e).getTime(); | 
|     } | 
|   | 
|     /** | 
|      * 格式化日期 | 
|      */ | 
|     public static Date parseDate(String date) { | 
|         return parse(date, "yyyy-MM-dd"); | 
|     } | 
|   | 
|     /** | 
|      * 格式化日期 | 
|      */ | 
|     public static Date parseTimeMinutes(String date) { | 
|         return parse(date, "yyyy-MM-dd HH:mm"); | 
|     } | 
|   | 
|     /** | 
|      * 格式化日期 | 
|      */ | 
|     public static Date parseTime(String date) { | 
|         return parse(date, "yyyy-MM-dd HH:mm:ss"); | 
|     } | 
|   | 
|     /** | 
|      * 格式化日期 | 
|      */ | 
|     public static Date parse(String date, String pattern) { | 
|         try { | 
|             if(Objects.nonNull(date)) { | 
|                 return DateUtils.parseDate(date, pattern); | 
|             } | 
|         } catch (ParseException e) { | 
|             e.printStackTrace(); | 
|         } | 
|         return null; | 
|     } | 
|   | 
|     /** | 
|      * 格式化日期 | 
|      */ | 
|     public static String format(Date date, String pattern) { | 
|         return DateFormatUtils.format(date, pattern); | 
|     } | 
|   | 
|     /** | 
|      * 把日期转换为Timestamp | 
|      */ | 
|     public static Timestamp format(Date date) { | 
|         return new Timestamp(date.getTime()); | 
|     } | 
|   | 
|     /** | 
|      * 校验日期是否合法 | 
|      */ | 
|     public static boolean isValidDate(String s) { | 
|         return parse(s, "yyyy-MM-dd HH:mm:ss") != null; | 
|     } | 
|   | 
|     /** | 
|      * 校验日期是否合法 | 
|      */ | 
|     public static boolean isValidDate(String s, String pattern) { | 
|         return parse(s, pattern) != null; | 
|     } | 
|   | 
|     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; | 
|         } | 
|     } | 
|   | 
|     /** | 
|      * <li>功能描述:时间相减得到天数 | 
|      */ | 
|     public static long getDaySub(String beginDateStr, String endDateStr) { | 
|         long day = 0; | 
|         SimpleDateFormat format = new SimpleDateFormat( | 
|                 "yyyy-MM-dd"); | 
|         Date beginDate = null; | 
|         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天之后的日期 | 
|      */ | 
|     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天之后的日期 | 
|      */ | 
|     public static String getAfterDayDate2(Date date,String days) { | 
|         int daysInt = Integer.parseInt(days); | 
|   | 
|         Calendar canlendar = Calendar.getInstance(); // java.util包 | 
|         canlendar.setTime(date); | 
|         canlendar.add(Calendar.DATE, daysInt); // 日期减 如果不够减会将月变动 | 
|         Date afterDate = canlendar.getTime(); | 
|   | 
|         SimpleDateFormat sdfd = new SimpleDateFormat("yyyy-MM-dd"); | 
|         String dateStr = sdfd.format(afterDate); | 
|   | 
|         return dateStr; | 
|     } | 
|   | 
|     /** | 
|      * 得到n天之后是周几 | 
|      */ | 
|     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; | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 得到系统日期 | 
|      * | 
|      * @return | 
|      */ | 
|     public static Date getDate() { | 
|         TimeZone.setDefault(tz); | 
|         return new Date(); | 
|     } | 
|   | 
|     /** | 
|      * 获取当前毫秒数 | 
|      * | 
|      * @return long | 
|      */ | 
|     public static long getCurMilli() { | 
|         long millisecond = 0; | 
|         Calendar cal = Calendar.getInstance(); | 
|         millisecond = cal.getTimeInMillis(); | 
|         return millisecond; | 
|     } | 
|   | 
|     /** | 
|      * 得到系统Calendar日期 | 
|      * | 
|      * @return | 
|      */ | 
|     public static Calendar getCalendar() { | 
|         TimeZone.setDefault(tz); | 
|         Calendar cal = Calendar.getInstance(); | 
|         return cal; | 
|     } | 
|     /** | 
|      * 毫秒转日期时间 | 
|      * | 
|      * @param millisecond | 
|      * @return | 
|      */ | 
|     public static String getDateTime(long millisecond) { | 
|         if (millisecond == 0) { | 
|             millisecond = getCurMilli(); | 
|         } | 
|         SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | 
|         Calendar calendar = getCalendar(); | 
|         calendar.setTimeInMillis(millisecond); | 
|         return dateformat.format(calendar.getTime()); | 
|     } | 
|   | 
|     /** | 
|      * 日期转毫秒(加分钟) | 
|      * | 
|      * @param date | 
|      * @return | 
|      */ | 
|     public static long getMillisecond_fz(String date, Integer day) { | 
|         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | 
|         String newDate = ""; | 
|         if ("".equals(date)) { | 
|             newDate = sdf.format(DateUtil.getDate()); | 
|         } else { | 
|             newDate = getDateTime(Long.parseLong(date)); | 
|         } | 
|         Date dt = null; | 
|         try { | 
|             dt = sdf.parse(newDate); | 
|         } catch (ParseException e) { | 
|             e.printStackTrace(); | 
|         } | 
|         Calendar rightNow = Calendar.getInstance(); | 
|         rightNow.setTime(dt); | 
|         rightNow.add(Calendar.MINUTE, day); | 
|         Date dt1 = rightNow.getTime(); | 
|         return dt1.getTime(); | 
|     } | 
|   | 
|   | 
|     /** | 
|      * 计算年龄 | 
|      * @param birthDate | 
|      * @return | 
|      */ | 
|     public static int age(Date birthDate) { | 
|         // 当前日历 | 
|         Calendar nowCalendar = Calendar.getInstance(); | 
|         // 生日大于当前日期 | 
|         if (nowCalendar.before(birthDate)) { | 
|             throw new IllegalArgumentException("The birth date is before current time, it's unbelievable"); | 
|         } | 
|         // 当前年月日 | 
|         int yearNow = nowCalendar.get(Calendar.YEAR); | 
|         int monthNow = nowCalendar.get(Calendar.MONTH); | 
|         int dayNow = nowCalendar.get(Calendar.DAY_OF_MONTH); | 
|         // 出生日期年月日 | 
|         Calendar birthCalendar = Calendar.getInstance(); | 
|         birthCalendar.setTime(birthDate); | 
|         int yearBirth = birthCalendar.get(Calendar.YEAR); | 
|         int monthBirth = birthCalendar.get(Calendar.MONTH); | 
|         int dayBirth = birthCalendar.get(Calendar.DAY_OF_MONTH); | 
|         // 粗计算年龄 | 
|         int age = yearNow - yearBirth; | 
|         // 当前月份小于出生月份年龄减一 | 
|         if (monthNow < monthBirth) { age--; } | 
|         // 当前月份等于出生月份,日小于生日年龄减一 | 
|         else if (monthNow == monthBirth && dayNow < dayBirth) { age--; } | 
|         // 返回年龄值 | 
|         return age; | 
|     } | 
|   | 
|   | 
| } |