| | |
| | | import java.text.DateFormat; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.util.ArrayList; |
| | | import java.util.Calendar; |
| | | import java.util.Date; |
| | |
| | | |
| | | /** |
| | | * 日期格式化,转换工具类 |
| | | * |
| | | * |
| | | * @author Ron |
| | | * @createTime 2014.08.30 |
| | | */ |
| | | public class DateUtil { |
| | | private final static int[] dayArr = new int[] { 20, 19, 21, 20, 21, 22, 23, |
| | | 23, 23, 24, 23, 22 }; |
| | | private final static String[] constellationArr = new String[] { "摩羯座", |
| | | "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", |
| | | "天蝎座", "射手座", "摩羯座" }; |
| | | |
| | | public static final String DATE_FORMAT_STS = "yyyy-MM-dd'T'HH:mm:ss"; |
| | | |
| | | public static final String DATE_FORMAT_ST = "yyyy-MM-dd'T'HH:mm"; |
| | | |
| | | public static final String HH_mm = "HH:mm"; |
| | | |
| | | public static final String HHmm = "HHmm"; |
| | | |
| | | public static final String MONTH = "yyyy-MM"; |
| | | |
| | |
| | | |
| | | public static final String DATE_FORMAT_MONGO = "yyyy-MM-dd'T'HH:mm:ss.SSS"; |
| | | |
| | | public static final String DATE_FORMAT_STS = "yyyy-MM-dd'T'HH:mm:ss"; |
| | | |
| | | |
| | | public static final String DATE_FORMAT_MM = "yyyy-MM-dd HH:mm"; |
| | | |
| | | public static final String DATE_FORMAT_HH = "yyyy-MM-dd HH"; |
| | | |
| | | |
| | | public static final String DATE_FORMAT_DD = "yyyy-MM-dd"; |
| | | |
| | |
| | | |
| | | /** |
| | | * 返回年份 |
| | | * |
| | | * |
| | | * @param date |
| | | * 日期 |
| | | * @return 返回年份 |
| | |
| | | } |
| | | |
| | | /** |
| | | * Java通过生日计算星座 |
| | | * |
| | | * @param month |
| | | * @param day |
| | | * @return |
| | | */ |
| | | public static String getConstellation(int month, int day) { |
| | | return day < dayArr[month - 1] ? constellationArr[month - 1] |
| | | : constellationArr[month]; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * |
| | | * @Title: getNextNMinute 获取date之后N分钟的时间 |
| | | * @Description: TODO |
| | | * @author:罗凯 |
| | | * @param date |
| | | * @return |
| | | * Date 返回类型 |
| | | * @date 2016年8月3日 下午2:48:51 |
| | | * @throws |
| | | */ |
| | | public static Date getNextNMinute(Date date,int n){ |
| | | return new Date(date.getTime()+(n*60*1000)); |
| | | } |
| | | /** |
| | | * 返回月份 |
| | | * |
| | | * |
| | | * @param date |
| | | * 日期 |
| | | * @return 返回月份 |
| | |
| | | c.setTime(date); |
| | | return c.get(Calendar.MONTH) + 1; |
| | | } catch (Exception e) { |
| | | |
| | | |
| | | } |
| | | return 0; |
| | | } |
| | | |
| | | /** |
| | | * 日期转字符串 |
| | | * |
| | | * |
| | | * @param date |
| | | * @param format |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * 字符串转日期 |
| | | * |
| | | * |
| | | * @param dateStr |
| | | * @param format |
| | | * @return |
| | |
| | | try { |
| | | return fmt.parse(dateStr); |
| | | } catch (ParseException e) { |
| | | |
| | | |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取一个编码 |
| | | * 获取一个当前时间并且加入了四位的随机字母 |
| | | * @return |
| | | */ |
| | | public static String getTimeCode() { |
| | | return dateToString(new Date(), "yyyyMMddssSSS")+StringUtils.getRandomString(4); |
| | | } |
| | | |
| | | /** |
| | | * 判断给定的日期是一周中的第几天,注意:按照中国的习惯,周日是第七天 |
| | | * |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 指定时间的下一天 |
| | | * |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | |
| | | cal.add(Calendar.DATE, 1); |
| | | return cal.getTime(); |
| | | } catch (Exception e) { |
| | | |
| | | |
| | | } |
| | | |
| | | return null; |
| | |
| | | |
| | | /** |
| | | * 指定时间的前一天 |
| | | * |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | |
| | | cal.add(Calendar.DATE, -1); |
| | | return cal.getTime(); |
| | | } catch (Exception e) { |
| | | |
| | | |
| | | } |
| | | |
| | | return null; |
| | |
| | | |
| | | /** |
| | | * 指定时间的下N天 |
| | | * |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | |
| | | cal.add(Calendar.DATE, nDay); |
| | | return cal.getTime(); |
| | | } catch (Exception e) { |
| | | |
| | | |
| | | } |
| | | |
| | | return null; |
| | |
| | | |
| | | /** |
| | | * 指定时间的前N天 |
| | | * |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | |
| | | cal.add(Calendar.DATE, -nDay); |
| | | return cal.getTime(); |
| | | } catch (Exception e) { |
| | | |
| | | |
| | | } |
| | | |
| | | return null; |
| | |
| | | |
| | | /** |
| | | * 获取一天的起始时间 |
| | | * |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | |
| | | try { |
| | | return fmt.parse(dateStr); |
| | | } catch (ParseException e) { |
| | | |
| | | |
| | | } |
| | | |
| | | return date; |
| | |
| | | |
| | | /** |
| | | * 获取一天的结束时间 |
| | | * |
| | | * |
| | | * @param date |
| | | * @return |
| | | */ |
| | |
| | | try { |
| | | return fmt.parse(dateStr); |
| | | } catch (ParseException e) { |
| | | |
| | | |
| | | } |
| | | |
| | | return date; |
| | |
| | | |
| | | /** |
| | | * currentDat是否在referenceDate日期之前 |
| | | * |
| | | * |
| | | * @param referenceDate |
| | | * @param currentDat |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * currentDat是否在referenceDate日期之后 |
| | | * |
| | | * |
| | | * @param referenceDate |
| | | * @param currentDat |
| | | * @return |
| | |
| | | } |
| | | return currentDate.after(referenceDate); |
| | | } |
| | | public static long getDifTimeMin(Date beginTime,Date endTime){ |
| | | return (endTime.getTime()-beginTime.getTime())/1000/ 60; |
| | | } |
| | | public static List<Date> getFutureDay(Date date, int start,int end){ |
| | | List<Date> dates=new ArrayList<Date>(); |
| | | for (int i = 0; i < end-start; i++) { |
| | | dates.add(DateUtil.nextNDate(date,i)); |
| | | } |
| | | return dates; |
| | | } |
| | | /** |
| | | * 字符串转日期 如果转换失败就返回一个当前时间date |
| | | * |
| | | * @param dateStr |
| | | * @param format |
| | | * @return |
| | | */ |
| | | public static Date stringToDateNew(String dateStr, String format) { |
| | | |
| | | if (StringUtils.isBlank(dateStr) || StringUtils.isBlank(format)) { |
| | | return new Date(); |
| | | } |
| | | DateFormat fmt = new SimpleDateFormat(format); |
| | | try { |
| | | return fmt.parse(dateStr); |
| | | } catch (ParseException e) { |
| | | |
| | | } |
| | | return new Date(); |
| | | } |
| | | /** |
| | | * 判断currentDate是否在startDate和endDate之间,不包括startDate和endDate |
| | | * |
| | | * |
| | | * @param startDate |
| | | * @param endDate |
| | | * @param currentDate |
| | |
| | | return false; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * 获取startDate到endDate之间的星期day(中文星期)不包括startDate和endDate |
| | | * |
| | | * |
| | | * @param startDate |
| | | * @param endDate |
| | | * @param day |
| | |
| | | return listDate; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | /** |
| | | * date转换成Timestamp |
| | | * |
| | | * |
| | | * @param date |
| | | * @param format |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * 获取早中晚 |
| | | * |
| | | * |
| | | * @param time |
| | | * @return |
| | | */ |
| | |
| | | |
| | | /** |
| | | * 获取早中晚的开始时间 |
| | | * |
| | | * |
| | | * @param date |
| | | * @param time |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * 获取早中晚的结束时间 |
| | | * |
| | | * |
| | | * @param date |
| | | * @param time |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * 得到几天前的时间 |
| | | * |
| | | * |
| | | * @param d |
| | | * @param day |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * 得到几天后的时间 |
| | | * |
| | | * |
| | | * @param d |
| | | * @param day |
| | | * @return |
| | |
| | | |
| | | /** |
| | | * 将日期类型格式化成字符串 |
| | | * |
| | | * |
| | | * @param date |
| | | * @return 格式化后日期字符串 |
| | | * @throws ParseException |
| | |
| | | |
| | | /** |
| | | * 获取时间戳 |
| | | * |
| | | * |
| | | * @return |
| | | */ |
| | | public static String getTimeMark() { |
| | |
| | | } |
| | | return um; |
| | | } |
| | | |
| | | /** |
| | | * 根据单位计算目标日期 |
| | | * |
| | | * @param num 距离 |
| | | * @param unit 日期单位 Y/M/D |
| | | * @return |
| | | */ |
| | | public static Date calDate(Integer num, String unit) { |
| | | Calendar calendar = Calendar.getInstance(); |
| | | Date targetDate = null; |
| | | switch (unit) { |
| | | case "Y": |
| | | calendar.add(Calendar.YEAR, num); |
| | | targetDate = calendar.getTime(); |
| | | break; |
| | | case "M": |
| | | calendar.add(Calendar.MONTH, num); |
| | | targetDate = calendar.getTime(); |
| | | break; |
| | | case "D": |
| | | calendar.add(Calendar.DAY_OF_MONTH, num); |
| | | targetDate = calendar.getTime(); |
| | | break; |
| | | default: |
| | | targetDate = stringToDate("9999-12-31", DATE_FORMAT_DD); |
| | | |
| | | } |
| | | |
| | | return targetDate; |
| | | } |
| | | |
| | | public static String getAgeForBirthDay(Date birthDay) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | if (birthDay == null) { |
| | | return "-"; |
| | | } |
| | | // 出生日期晚于当前时间,无法计算 |
| | | if (cal.before(birthDay)) { |
| | | return "-"; |
| | | } |
| | | // 当前年份 |
| | | int yearNow = cal.get(Calendar.YEAR); |
| | | // 当前月份 |
| | | int monthNow = cal.get(Calendar.MONTH); |
| | | // 当前日期 |
| | | int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); |
| | | cal.setTime(birthDay); |
| | | int yearBirth = cal.get(Calendar.YEAR); |
| | | int monthBirth = cal.get(Calendar.MONTH); |
| | | int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); |
| | | // 计算整岁数 |
| | | Integer age = yearNow - yearBirth; |
| | | if (monthNow <= monthBirth) { |
| | | if (monthNow == monthBirth) { |
| | | if (dayOfMonthNow < dayOfMonthBirth) { |
| | | // 当前日期在生日之前,年龄减一 |
| | | age--; |
| | | } |
| | | } else { |
| | | age--; |
| | | } |
| | | } |
| | | |
| | | return age.toString(); |
| | | } |
| | | } |