package com.inet.ailink.receiver.common.utils; import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.time.FastDateFormat; import java.math.BigDecimal; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; /** * @ClassName: DateUtils * @Description: 日期处理工具类 * @author david * @date 2013-8-20 下午3:11:57 * */ public class DateUtils { /** * ISO8601 formatter for date without time zone. The format used is * yyyy-MM-dd. */ public static final FastDateFormat DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd"); /** * ISO8601 date format: yyyy-MM-dd */ public static final String DATE_FORMAT_PATTERN = "yyyy-MM-dd"; public static final String DATE_FORMAT_PATTERN_NO_SEPARATOR = "yyyyMMdd"; /** * ISO8601 date-time format: yyyy-MM-dd HH:mm:ss */ public static final String DATETIME_FORMAT_PATTERN = "yyyy-MM-dd HH:mm:ss"; /** * for bet view format: yyyy-MM-dd HH:mm:ss */ public static final String DATETIME_JSVIEW_FORMAT_PATTERN = "yyyy/MM/dd HH:mm:ss"; public static final String DATETIME_SENDTIME_FORMAT_PATTERN = "yyyyMMddHHmmssSSS"; /** * 日期时间格式:yyyy-MM-dd HH:mm,不显示秒 */ public static final String DATETIME_WITHOUT_SECOND_FORMAT_PATTERN = "yyyy-MM-dd HH:mm"; /** * 日期时间格式:yyyy-MM-dd HH */ public static final String DATETIME_WITHOUT_MINUTES_FORMAT_PATTERN = "yyyy-MM-dd HH"; public static final String DATE_TIME_START00 = " 00:00:00"; public static final String DATE_TIME_END23 = " 23:59:59"; /** * 获得当前时间 */ public static Date currentDate() { return new Date(); } public static Date getDate(Long time) { return new Date(time); } public static Long getCurTime() { return System.currentTimeMillis(); } public static Date parse(String str) { return parse(str, DATE_FORMAT_PATTERN); } public static Date parse(String str, String pattern) { if (StringUtils.isBlank(str)) { return null; } DateFormat parser = new SimpleDateFormat(pattern); try { return parser.parse(str); } catch (ParseException e) { throw new IllegalArgumentException("Can't parse " + str + " using " + pattern); } } /** * 根据时间变量返回时间字符串 */ public static String format(Date date, String pattern) { if (date == null) { return null; } FastDateFormat df = FastDateFormat.getInstance(pattern); return df.format(date); } public static String format(Long time, String pattern) { if (time == null) { return null; } FastDateFormat df = FastDateFormat.getInstance(pattern); return df.format(new Date(time)); } /** * return date format is yyyy-MM-dd */ public static String format(Date date) { return date == null ? null : DATE_FORMAT.format(date); } public static Date getEndDateTimeOfCurrentYear() { Calendar cal = Calendar.getInstance(); cal.setTime(currentDate()); cal.set(Calendar.MONTH, Calendar.DECEMBER); cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); return cal.getTime(); } public static Date getStartDateTimeOfCurrentYear() { Calendar cal = Calendar.getInstance(); cal.setTime(currentDate()); cal.set(Calendar.MONTH, Calendar.JANUARY); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return parse(format(cal.getTime())); } public static Date getStartDateTimeOfYear(int year) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, Calendar.JANUARY); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return parse(format(cal.getTime())); } public static Date getEndDateTimeOfYear(int year) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, Calendar.DECEMBER); cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); return cal.getTime(); } public static Date getStartTimeOfCurrentDate() { return getStartTimeOfDate(currentDate()); } public static Date getEndTimeOfCurrentDate() { return getEndTimeOfDate(currentDate()); } public static Date getStartTimeOfCurrentMonth() { return getStartDateTimeOfMonth(DateUtils.currentDate()); } public static Date getEndTimeOfCurrentMonth() { return getEndDateTimeOfMonth(DateUtils.currentDate()); } public static Date getStartTimeOfDate(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return parse(format(cal.getTime())); } public static Date getEndTimeOfDate(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); return cal.getTime(); } public static Date getSpecialEndTimeOfDate(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.HOUR_OF_DAY, 24); cal.set(Calendar.MINUTE, 00); cal.set(Calendar.SECOND, 00); return cal.getTime(); } public static Date getStartDateTimeOfMonth(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return parse(format(cal.getTime())); } public static Date getStartDateTimeOfMonth(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month - 1); cal.set(Calendar.DAY_OF_MONTH, 1); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return parse(format(cal.getTime())); } public static Date getEndDateTimeOfMonth(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.set(Calendar.DAY_OF_MONTH, cal.getActualMaximum(Calendar.DAY_OF_MONTH)); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); return cal.getTime(); } public static Date addHours(Date date, int hours) { return add(date, Calendar.HOUR_OF_DAY, hours); } public static Date addMinutes(Date date, int minutes) { return add(date, Calendar.MINUTE, minutes); } public static Date addSeconds(Date date, int seconds) { return add(date, Calendar.SECOND, seconds); } public static Date addDays(Date date, int days) { return add(date, Calendar.DATE, days); } public static Date addMonths(Date date, int months) { return add(date, Calendar.MONTH, months); } public static Date addYears(Date date, int years) { return add(date, Calendar.YEAR, years); } private static Date add(Date date, int field, int amount) { Calendar cal = Calendar.getInstance(); cal.setTime(date); cal.add(field, amount); return cal.getTime(); } public static long calcDateBetween(Date start, Date end) { if (start == null || end == null) { return 0; } return ((end.getTime() - start.getTime()) / 86400001) + 1; } public static long calcHoursBetween(Date start, Date end) { if (start == null || end == null) { return 0; } return ((end.getTime() - start.getTime()) / (60000 * 60)); } public static Double calcHoursDoubleBetween(Date start, Date end) { if (start == null || end == null) { return 0d; } Double time = ((end.getTime() - start.getTime()) / (60000.0 * 60.0)); return Double.valueOf(new java.text.DecimalFormat("#.0").format(time)); } public static Double calcHoursDouble(Date start, Date end) { if (start == null || end == null) { return 0d; } // (new BigDecimal(end.getTime()).subtract(new // BigDecimal(start.getTime()))).divide(new BigDecimal(60000.0*60.0), 7, // BigDecimal.ROUND_HALF_UP).doubleValue(); Double time = (new BigDecimal(end.getTime()).subtract(new BigDecimal(start.getTime()))) .divide(new BigDecimal(60000.0 * 60.0), 7, BigDecimal.ROUND_HALF_UP).doubleValue();// ((end.getTime() - // start.getTime()) // / // (60000.0*60.0)); return time; } public static long calcMinutesBetween(Date start, Date end) { if (start == null || end == null) { return 0; } return ((end.getTime() - start.getTime()) / 60000); } public static long calcSecondsBetween(Date start, Date end) { if (start == null || end == null) { return 0; } return ((end.getTime() - start.getTime()) / 1000); } public static long calcSecondsBetween(Long start, Long end) { return (end - start) / 1000; } /** * 获得日期是否为星期天。 * * @param date 日期 * @return */ public static boolean isSunday(Date date) { return getDate(date) == Calendar.SUNDAY; } /** * 获得日期是否为星期一。 * * @param date 日期 * @return */ public static boolean isMonday(Date date) { return getDate(date) == Calendar.MONDAY; } /** * 获得日期是否为星期二。 * * @param date 日期 * @return */ public static boolean isTuesday(Date date) { return getDate(date) == Calendar.TUESDAY; } /** * 获得日期是否为星期三。 * * @param date 日期 * @return */ public static boolean isWednesday(Date date) { return getDate(date) == Calendar.WEDNESDAY; } /** * 获得日期是否为星期四。 * * @param date 日期 * @return */ public static boolean isThursday(Date date) { return getDate(date) == Calendar.THURSDAY; } /** * 获得日期是否为星期五。 * * @param date 日期 * @return */ public static boolean isFriday(Date date) { return getDate(date) == Calendar.FRIDAY; } /** * 获得日期是否为星期六。 * * @param date 日期 * @return */ public static boolean isSaturday(Date date) { return getDate(date) == Calendar.SATURDAY; } public static int getDate(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.DAY_OF_WEEK); } /** * 获得相对于今天的昨天的时间。 * * @return 昨天此时。 */ public static Date getYesterday() { return addDays(currentDate(), -1); } /** * 获得月份 * * @param date * @return */ public static int getMonth(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MONTH) + 1; } /** * 获得年份 * * @param date * @return */ public static int getYear(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.YEAR); } /** * 获得天 * * @param date * @return */ public static int getDay(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.DATE); } /** * 获得天 * * @param date * @return */ public static int getDayOfYear(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.DAY_OF_YEAR); } /** * 获得小时 * * @param date * @return */ public static int getHours(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.HOUR_OF_DAY); } public static int getMinutes(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MINUTE); } public static int getSeconds(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.SECOND); } public static int getMILLISECOND(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); return calendar.get(Calendar.MILLISECOND); } public static long getTimeDiff(Date beginDate, Date endDate) { return (endDate.getTime() - beginDate.getTime()) / 1000; } public static int getDaysOfMonth(int year, int month) { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, year); cal.set(Calendar.MONTH, month);// 7月 return cal.getActualMaximum(Calendar.DATE); } public static long convertDate2Long(Date date) { if (date == null) { return 0l; } return date.getTime(); } public static Date convertLong2Date(Long unixTimestamp) { if (unixTimestamp != null) { return new Date(unixTimestamp); } return null; } /** * 判断时间是否在指定的时间范围内。 * * @param low * @param high * @return */ public static boolean between(Date low, Date high) { return currentDate().after(low) && currentDate().before(high); } public static int getDayValue(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); int i = cal.get(Calendar.DAY_OF_WEEK); if (i == 1) { return 7; } else { return i - 1; } } public static boolean isBefore(Date date1, Date date2) { return date1.getTime() < date2.getTime(); } public static Date average(Date date1, Date date2) { return new Date((date1.getTime() + date2.getTime()) / 2); } public static int getDaysOfMonth(Date date) { Calendar cal = Calendar.getInstance(); cal.setTime(date); return cal.get(Calendar.DAY_OF_MONTH); } public static int getCurrentRemainingSeconds() { // *** 计算过期时间 一整天 获取 时:分:秒 Calendar calendar = Calendar.getInstance(); int hours = calendar.get(Calendar.HOUR_OF_DAY); // 时 int minutes = calendar.get(Calendar.MINUTE); // 分 int seconds = calendar.get(Calendar.SECOND); // 秒 return 24 * 60 * 60 - hours * 60 * 60 - minutes * 60 - seconds; } public static Long getTimeLong(String str) { return parse(str, DATETIME_FORMAT_PATTERN).getTime(); } public static String getStringTodayC() { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String dateString = formatter.format(currentTime); return dateString; } /////////////////////////////////////////////////// // 引用s https://blog.csdn.net/tz_gx/article/details/25284237 // s 上月第一天 public static Date getPreviousMonthDayBegin() { Calendar lastDate = Calendar.getInstance(); lastDate.set(Calendar.DATE, 1);// 设为当前月的1号 lastDate.add(Calendar.MONTH, -1);// 减一个月,变为上月的1号 return lastDate.getTime(); } // s 获得上月最后一天的日期 public static Date getPreviousMonthDayEnd() { Calendar lastDate = Calendar.getInstance(); lastDate.add(Calendar.MONTH, -1);// 减一个月 lastDate.set(Calendar.DATE, 1);// 把日期设置为当月第一天 lastDate.roll(Calendar.DATE, -1);// 日期回滚一天,也就是本月最后一天 return lastDate.getTime(); } // s 获取当月第一天 public static Date getCurrentMonthDayBegin() { Calendar lastDate = Calendar.getInstance(); lastDate.set(Calendar.DATE, 1);// 设为当前月的1号 return lastDate.getTime(); } // s 计算当月最后一天,返回字符串 public static Date getCurrentMonthDayEnd() { Calendar lastDate = Calendar.getInstance(); lastDate.set(Calendar.DATE, 1);// 设为当前月的1号 lastDate.add(Calendar.MONTH, 1);// 加一个月,变为下月的1号 lastDate.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天 return lastDate.getTime(); } // s 获得本周一的日期 public static Date getCurrentWeekDayBegin() { int mondayPlus = getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus); return currentDate.getTime(); } // s 获得本周星期日的日期 public static Date getCurrentWeekDayEnd() { int mondayPlus = getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus + 6); Date monday = currentDate.getTime(); return monday; } // s 获得当前日期与本周一相差的天数 private static int getMondayPlus() { Calendar cd = Calendar.getInstance(); // 获得今天是一周的第几天,星期日是第一天,星期二是第二天...... int dayOfWeek = cd.get(Calendar.DAY_OF_WEEK) - 1; // s 因为按中国礼拜一作为第一天所以这里减1 if (dayOfWeek == 1) { return 0; } else { return 1 - dayOfWeek; } } // s 获得上周星期一的日期 public static Date getPreviousWeekDayBegin() { int mondayPlus = getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus - 7); return currentDate.getTime(); } // s 获得上周星期日的日期 public static Date getPreviousWeekDayEnd() { int mondayPlus = getMondayPlus(); GregorianCalendar currentDate = new GregorianCalendar(); currentDate.add(GregorianCalendar.DATE, mondayPlus - 1); return currentDate.getTime(); } public static int getAge(Date birthDay){ Calendar cal = Calendar.getInstance(); if (cal.before(birthDay)) { //出生日期晚于当前时间,无法计算 return 0; } 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); int age = yearNow - yearBirth; //计算整岁数 if (monthNow <= monthBirth) { if (monthNow == monthBirth) { if (dayOfMonthNow < dayOfMonthBirth) age--;//当前日期在生日之前,年龄减一 }else{ age--;//当前月份在生日之前,年龄减一 } } return age; } /////////////////////////////////// public static void main(String[] args) { // System.out.println(getMILLISECOND(new Date())); System.out.println(format(getPreviousWeekDayEnd())); } }