package ink.wgink.util.date; import org.apache.commons.lang3.StringUtils; import org.joda.time.DateTime; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; /** * 说明:日期处理 创建人:CM 修改时间:2015年11月24日 */ public class DateUtil { public final static String AM = "AM"; public final static String PM = "PM"; public final static SimpleDateFormat sdfYear = new SimpleDateFormat("yyyy"); public final static SimpleDateFormat sdfMonth = new SimpleDateFormat("MM"); public final static SimpleDateFormat sdfd = new SimpleDateFormat("dd"); public final static SimpleDateFormat sdfDay = new SimpleDateFormat("yyyy-MM-dd"); public final static SimpleDateFormat sdfDayZh = new SimpleDateFormat("yyyy年MM月dd日"); public final static SimpleDateFormat sdfDays = new SimpleDateFormat("yyyyMMdd"); public final static SimpleDateFormat sdfTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public final static SimpleDateFormat sdfTimes = new SimpleDateFormat("yyyyMMddHHmmss"); public final static SimpleDateFormat sdfYearMonth = new SimpleDateFormat("yyyyMM"); public static String getZhDate(String date) { try { return sdfDayZh.format(sdfDay.parse(date)); } catch (Exception e) { e.printStackTrace(); return date; } } /** * 校验日期格式 * * @param date * @param simpleDateFormat * @return */ public static boolean checkFormat(String date, SimpleDateFormat simpleDateFormat) { if (StringUtils.isEmpty(date) || simpleDateFormat == null) { return false; } try { simpleDateFormat.parse(date); return true; } catch (ParseException e) { return false; } } /** * 获取YYYYMM格式 * * @return */ public static String getSdfYearMonth() { return sdfYearMonth.format(new Date()); } /** * 获取YYYYMMDDHHMMSS格式 * * @return */ public static String getSdfTimes() { return sdfTimes.format(new Date()); } /** * 获取YYYY格式 * * @return */ public static String getYear() { return sdfYear.format(new Date()); } /** * 获取MM格式 * * @return */ public static String getMonth() { return sdfMonth.format(new Date()); } /** * 获取dd格式 * * @return */ public static String getToday() { return sdfd.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()); } /** * 截取日期 * * @param datetime * @return */ public static String getDate(String datetime) { return datetime.substring(0, 10); } /** * @param s * @param e * @return boolean * @throws @author fh * @Title: compareDate * @Description: TODO(日期比较 , 如果s > = e 返回true 否则返回false) */ public static boolean compareDate(String s, String e) { if (fomatDate(s) == null || fomatDate(e) == null) { return false; } return fomatDate(s).getTime() >= fomatDate(e).getTime(); } /** * 格式化日期 * * @param date * @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; } } /** * 校验日期是否合法 * * @param s * @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; } } /** * @param startTime * @param endTime * @return */ public static int getDiffYear(String startTime, String endTime) { DateFormat fmt = new SimpleDateFormat("yyyy-MM-dd"); try { // long aa=0; 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; } } /** *
  • 功能描述:时间相减得到天数 * * @param beginDateStr * @param endDateStr * @return long * @author Administrator */ 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天之后的日期 * * @param days * @return */ public static String getAfterDayDate(String days) { int daysInt = Integer.parseInt(days); // java.util包 Calendar canlendar = Calendar.getInstance(); // 日期减 如果不够减会将月变动 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); // java.util包 Calendar canlendar = Calendar.getInstance(); // 日期减 如果不够减会将月变动 canlendar.add(Calendar.DATE, daysInt); Date date = canlendar.getTime(); SimpleDateFormat sdf = new SimpleDateFormat("E"); String dateStr = sdf.format(date); return dateStr; } /** * 计算年龄生日格式yyyy-MM-dd * * @param birth * @return */ public static String getAge(String birth) { int cYear = Integer.parseInt(getYear()); String[] births = birth.split("-"); int year = Integer.parseInt(births[0]); if (cYear <= year) { return "0"; } int cMonth = Integer.parseInt(getMonth()); int cDay = Integer.parseInt(getToday()); int month = Integer.parseInt(births[1]); int day = Integer.parseInt(births[2]); int age = cYear - year; if (cMonth - month > 0) { return String.valueOf(age); } if (cDay - day > 0) { return String.valueOf(age); } return String.valueOf(age - 1); } /** * 获取本周周一的日期 */ public static String weekStartDate(String pattern) { return new DateTime().dayOfWeek().withMinimumValue().toString(pattern); } /** * 获取本周周一的日期 */ public static Date weekStartDate() { return new DateTime().dayOfWeek().withMinimumValue().toDate(); } /** * 获取本周最后一天 * * @return */ public static String weekEndDate(String pattern) { return new DateTime().dayOfWeek().withMaximumValue().toString(pattern); } /** * 获取本周最后一天 * * @return */ public static Date weekEndDate() { return new DateTime().dayOfWeek().withMaximumValue().toDate(); } /** * 获取本月开始日期 * * @param pattern * @return */ public static String monthStartDate(String pattern) { return new DateTime().dayOfMonth().withMinimumValue().toString(pattern); } /** * 获取本月开始日期 * * @return */ public static Date monthStartDate() { return new DateTime().dayOfMonth().withMinimumValue().toDate(); } /** * 获取本月结束日期 * * @param pattern * @return */ public static String monthEndDate(String pattern) { return new DateTime().dayOfMonth().withMaximumValue().toString(pattern); } /** * 获取本月结束日期 * * @return */ public static Date monthEndDate() { return new DateTime().dayOfMonth().withMaximumValue().toDate(); } /** * 格式化日期 * * @param parseLong * @param format * @return */ public static String formatDate(long parseLong, String format) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format); String date; try { date = simpleDateFormat.format(new Date(parseLong)); } catch (Exception e) { e.printStackTrace(); return null; } return date; } /** * 获取前几天的日期,带格式 * * @param day * @param format * @return */ public static String getBeforeDate(int day, String format) { DateTime time = new DateTime().plusDays(-day); return sdfDay.format(time.toDate()); } /** * 计算时间差 * * @param startTime * @param endTime * @param format * @return */ public static long getTimeConsuming(String startTime, String endTime, String format) throws ParseException { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm"); long start = simpleDateFormat.parse(startTime).getTime(); long end = simpleDateFormat.parse(endTime).getTime(); long useTime = end - start; return useTime < 0 ? 0 : useTime; } /** * 计算年龄 * * @param birthday yyyy-MM-dd * @return */ public static int getAgeByBirthday(String birthday) { int age = 0; String[] days = getDay().split("-"); String[] births = birthday.split("-"); int year = Integer.parseInt(days[0]); int birthYear = Integer.parseInt(births[0]); int month = Integer.parseInt(days[1]); int birthMonth = Integer.parseInt(births[1]); int day = Integer.parseInt(days[2]); int birthDay = Integer.parseInt(births[2]); // 判断年龄是否相等 if (year - birthYear > 0) { if (month - birthMonth > 0) { return year - birthYear; } else if (month - birthMonth == 0) { if (day - birthDay > 0) { return year - birthYear; } return year - birthYear - 1; } return year - birthYear - 1; } return age; } /** * 获得上下午标识 * * @return */ public static String getAmPm() { DateTime dateTime = new DateTime(); int hour = dateTime.getHourOfDay(); if (hour < 13) { return AM; } return PM; } }