package com.vincent.rsf.framework.common; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Objects; import java.util.concurrent.TimeUnit; /** * 时间工具类 * Created by vincent on 2019-04-15 */ public class DateUtils { public final static String yyyyMMdd_C="yyyy年MM月dd日"; public final static String yyyyMM_F="yyyy-MM"; public final static String yyyyMMdd_F="yyyy-MM-dd"; public final static String yyyyMMddHHmmss_F="yyyy-MM-dd HH:mm:ss"; public final static String yyyyMMddHHmmsssss_F="yyyy-MM-dd HH:mm:ss,SSS"; public final static String yyyy="yyyy"; public final static String yyyyMM="yyyyMM"; public final static String yyyyMMdd="yyyyMMdd"; public final static String yyyyMMddHH="yyyyMMddHH"; public final static String yyyyMMddHHmmss="yyyyMMddHHmmss"; public final static String YYMMDDHHMMSS="YYMMDDHHMMSS"; public final static String yyyyMMddHHmmsssss="yyyyMMddHHmmssSSS"; public final static String yyyyMMddTHHmmsssssZ_F="yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"; /** * date ==>> string */ public static String convert(Date date, String pattern){ return new SimpleDateFormat(pattern).format(date); } public static String convert(Date date){ return convert(date, yyyyMMddHHmmss_F); } /** * string ==>> date */ public static Date convert(String str, String pattern){ // if (str.length() < pattern.length()){ // throw new RuntimeException("时间解析失败 ==>> "+str); // } // if (str.length() > pattern.length()){ // str = str.substring(0, pattern.length()); // } SimpleDateFormat format = new SimpleDateFormat(pattern); Date date; try { date = format.parse(str); } catch (ParseException e) { throw new RuntimeException("时间解析失败 ==>> "+str); } return date; } public static Date convert(String str){ return convert(str, yyyyMMddHHmmss_F); } /** * 两个date之间相差的天数,不满一天算一天 */ public static int diff(Date date1, Date date2){ return getDaysByTimestamp(Math.abs(date2.getTime() - date1.getTime())); } public static long diffToMinute(Date date1, Date date2){ return Math.abs(date2.getTime() - date1.getTime())/1000/60; } public static long diffToSeconds(Date date1, Date date2){ return Math.abs(date2.getTime() - date1.getTime())/1000; } private static int getDaysByTimestamp(long timestamp){ double daysPoint = Arith.divides(2, timestamp, (1000 * 3600 * 24)); int daysPoint1 = (int) daysPoint; double daysPoint2 = (double) daysPoint1; if (daysPoint > daysPoint2){ return daysPoint1 + 1; } return daysPoint1; } /** * 入参date距离现在的秒数 */ public static int diffToNow(Date date){ long diff = new Date().getTime() - date.getTime(); return (int) (Math.abs(diff) / 1000); } /** * 当前时间戳(单位:秒) */ public static String createTimeStamp() { return Long.toString(System.currentTimeMillis() / 1000); } /** * 时间计算函数 * @param date 被计算时间实例 * @param val 计算值 * @param timeUnit 计算值单位 * @param subtraction 减法布尔 true:当前函数为减法计算,false:反之 * @return 计算结果 Date */ public static Date calculate(Date date, Long val, TimeUnit timeUnit, boolean subtraction){ if (Objects.isNull(date) || Objects.isNull(val) || Objects.isNull(timeUnit)){ return null; } return new Date(subtraction?date.getTime()-timeUnit.toMillis(val):date.getTime()+timeUnit.toMillis(val)); } public static Date calculate(Date date, Long val, TimeUnit timeUnit){ return calculate(date, val, timeUnit, false); } /** * 时间对象DateEntity */ public static DateEntity getDateEntity(Date date){ Calendar cal = Calendar.getInstance(); cal.setTime(date); DateEntity dateEntity = new DateEntity(); dateEntity.setYear(cal.get(Calendar.YEAR)); dateEntity.setMonth(cal.get(Calendar.MONTH)); dateEntity.setDay(cal.get(Calendar.DATE)); dateEntity.setHour(cal.get(Calendar.HOUR_OF_DAY)); dateEntity.setMinute(cal.get(Calendar.MINUTE)); dateEntity.setSecond(cal.get(Calendar.SECOND)); return dateEntity; } static class DateEntity { int year; int month; int day; int hour; int minute; int second; public int getYear() { return year; } public void setYear(final int year) { this.year = year; } public int getMonth() { return month; } public void setMonth(final int month) { this.month = month + 1; } public int getDay() { return day; } public void setDay(final int day) { this.day = day; } public int getHour() { return hour; } public void setHour(final int hour) { this.hour = hour; } public int getMinute() { return minute; } public void setMinute(final int minute) { this.minute = minute; } public int getSecond() { return second; } public void setSecond(final int second) { this.second = second; } } }