Date类

Date():空参数结构,会以以后操作系统的工夫结构一个Date对象。
long getTime():获取到从1970年开始,到这个Date对象示意的工夫,过了多少毫秒,返回工夫戳

public static void dateApi() {    Date d1 = new Date();    System.out.println(d1); //Mon Jul 19 20:42:57 CST 2021    System.out.println(d1.getTime()); //1626698635074}

Date日期类型的大小比拟

办法一:java.util.Date类实现了Comparable接口,能够间接调用Date的compareTo()办法来比拟大小

String beginTime = "2018-07-28 14:42:32";String endTime = "2018-07-29 12:26:32"; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try {    Date date1 = format.parse(beginTime);    Date date2 = format.parse(endTime);        int compareTo = date1.compareTo(date2);        System.out.println(compareTo);    } catch (ParseException e) {    e.printStackTrace();}

compareTo()办法的返回值,date1小于date2返回-1,date1大于date2返回1,相等返回0

办法二:通过Date自带的before()或者after()办法比拟

String beginTime = "2018-07-28 14:42:32";String endTime = "2018-07-29 12:26:32"; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try {    Date date1 = format.parse(beginTime);    Date date2 = format.parse(endTime);        boolean before = date1.before(date2);        System.out.println(before);    } catch (ParseException e) {    e.printStackTrace();}

before()或者after()办法的返回值为boolean类型

办法三:通过调用Date的getTime()办法获取到毫秒数来进行比拟

String beginTime = "2018-07-28 14:42:32";String endTime = "2018-07-29 12:26:32"; SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try {    Date date1 = format.parse(beginTime);    Date date2 = format.parse(endTime);        long beginMillisecond = date1.getTime();    long endMillisecond = date2.getTime();        System.out.println(beginMillisecond > endMillisecond);    } catch (ParseException e) {    e.printStackTrace();}

Calendar类

Calendar提供了很不便的不同日期格局的解决

public static void main(String[] args) {    System.out.println("------------Calendar无参结构------------");    //Calendar对象,不传参数,默认为以后日期    Calendar calendar =new GregorianCalendar();    //获取以后年份    System.out.println(calendar.get(Calendar.YEAR));    //获取以后月份 从0开始,0代表一月,1代表二月,以此类推    System.out.println(calendar.get(Calendar.MONTH));    //获取以后日期 也能够应用DAY_OF_MONTH    System.out.println(calendar.get(Calendar.DATE));    //获取以后时 24小时进制    System.out.println(calendar.get(Calendar.HOUR_OF_DAY));    //获取以后分    System.out.println(calendar.get(Calendar.MINUTE));    //获取以后秒    System.out.println(calendar.get(Calendar.SECOND));    //获取明天是这个月的第几个星期    System.out.println(calendar.get(Calendar.WEEK_OF_MONTH));    //获取明天是星期几  1示意星期天,2示意星期一,以此类推    System.out.println(calendar.get(Calendar.DAY_OF_WEEK));    System.out.println("------------Calendar有参结构------------");    /**         * 有参结构 别离代表年月日时分秒,写法简单明了,很合乎咱们人类的思维         * 留神月份的设置是从0开始的,这里设置的是月份是6,理论是设置了7月份         */    calendar =new GregorianCalendar(2019, 6, 14, 16, 15,30);    /**         * 除了在构造方法间接设置之外,也能够通过set办法设置         * 第一个参数示意设置的参数类型,第二个示意具体值         */    calendar.set(Calendar.YEAR, 2000);    calendar.set(Calendar.MONTH, 0);    calendar.set(Calendar.DATE, 20);    //...    System.out.println("------------Calendar和Date转换------------");    Date now = calendar.getTime();    calendar.setTime(now);    System.out.println("------------Calendar日期计算以及判断------------");    calendar = new GregorianCalendar();    Calendar calendar2 = new GregorianCalendar();    calendar2.set(Calendar.YEAR, 2800);    //是否在某个工夫(calendar2)之后    System.out.println(calendar.after(calendar2));    //是否在某个工夫(calendar2)之前    System.out.println(calendar.before(calendar2));    //减少多少年年,月日以及时分秒同理    calendar.add(Calendar.YEAR, -10);}

Time类

java.time包中的是类是不可变且线程平安的。
●Instant——它代表的是工夫戳
●LocalDate——不蕴含具体工夫的日期,比方2014-01-14。它能够用来存储生日,周年纪念日,入职日期等。
●LocalTime——它代表的是不含日期的工夫
●LocalDateTime——它蕴含了日期及工夫,不过还是没有偏移信息或者说时区。
●ZonedDateTime——这是一个蕴含时区的残缺的日期工夫,偏移量是以UTC/格林威治工夫为基准的。

/**1.LocalDateTime相较于LocalDate、LocalTime,应用频率要高2.相似于Calendar*///now():获取以后的日期、工夫、日期+工夫LocalDate localDate = LocalDate.now();  //2021-02-04LocalTime localTime = LocalTime.now();  //10:11:34.741LocalDateTime localDateTime = LocalDateTime.now();  //2021-02-04T10:11:34.768//of():设置指定的年、月、日、时、分、秒。没有偏移量LocalDateTime localDateTime1 = LocalDateTime.of(2020, 10, 6, 13, 23, 43);System.out.println(localDateTime1);  //2020-10-06T13:23:43//getXxx():获取相干的属性System.out.println(localDateTime.getDayOfMonth()); //4 日期System.out.println(localDateTime.getDayOfWeek());  //THURSDAY 星期System.out.println(localDateTime.getMonth());       //FEBRUARY 月份    System.out.println(localDateTime.getMonthValue()); //2 月份System.out.println(localDateTime.getMinute());     //12 分//体现不可变性//withXxx():设置相干的属性LocalDate localDate1 = localDate.withDayOfMonth(22);System.out.println(localDate);  //2021-02-04System.out.println(localDate1); //2021-02-22LocalDateTime localDateTime2 = localDateTime.withHour(4);System.out.println(localDateTime);System.out.println(localDateTime2);//不可变性LocalDateTime localDateTime3 = localDateTime.plusMonths(3);System.out.println(localDateTime);System.out.println(localDateTime3);LocalDateTime localDateTime4 = localDateTime.minusDays(6);System.out.println(localDateTime);System.out.println(localDateTime4);

java.sql.Timestamp:工夫戳,适配于SQL中的TIMESTAMP类型而呈现的,准确到纳秒级别。

DateFormat 类 与 SimpleDateFormat类

DateFormat 类和 SimpleDateFormat 类来格式化日期
DateFormat 位于text包中,它是一个抽象类,不能被实例化
DateFormat类是SimpleDateFormat类父类
SimpleDateFormat 是一个以与语言环境无关的形式来格式化和解析日期的具体类。它容许进行格式化(日期 -> 文本)、解析(文本 -> 日期)和规范化。

应用样例

//工夫格式化DateFormat tf1 = DateFormat.getTimeInstance(DateFormat.FULL, Locale.CHINA);DateFormat tf2 = DateFormat.getTimeInstance(DateFormat.LONG, Locale.CHINA);DateFormat tf3 = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.CHINA);DateFormat tf4 = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.CHINA);String t1 = tf1.format(new Date());String t2 = tf2.format(new Date());String t3 = tf3.format(new Date());String t4 = tf4.format(new Date());// 日期格式化DateFormat df1 = DateFormat.getDateInstance(DateFormat.FULL, Locale.CHINA);DateFormat df2 = DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA);DateFormat df3 = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.CHINA);DateFormat df4 = DateFormat.getDateInstance(DateFormat.SHORT, Locale.CHINA);String d1 = df1.format(new Date());String d2 = df2.format(new Date());String d3 = df3.format(new Date());String d4 = df4.format(new Date());// 输入日期System.err.println( d1 + " |eguid| " + t1);System.err.println( d2 + " |eguid| " + t2);System.err.println( d3 + " |eguid| " + t3);System.err.println( d4 + " |eguid| " + t4);后果2018年10月15日 |eguid| 星期一 上午09时30分43秒 CST2018年10月15日 |eguid| 上午09时30分43秒2018-10-15 |eguid| 9:30:4318-10-15 |eguid| 上午9:30
import java.text.SimpleDateFormat;import java.util.Date;/*** @auother eguid*/public class DateTest {    public static void main(String[] args) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy 年 MM 月 dd 日  HH 点 mm 分 ss 秒");        System.err.println(sdf.format(new Date())); //格式化以后日期工夫    }}2018 年 10 月 15 日 09 点 26 分 23 秒

DateFormatUtils类

//// Source code recreated from a .class file by IntelliJ IDEA// (powered by FernFlower decompiler)//package org.apache.commons.lang.time;import java.util.Calendar;import java.util.Date;import java.util.Locale;import java.util.TimeZone;public class DateFormatUtils {    public static final FastDateFormat ISO_DATETIME_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ss");    public static final FastDateFormat ISO_DATETIME_TIME_ZONE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd'T'HH:mm:ssZZ");    public static final FastDateFormat ISO_DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd");    public static final FastDateFormat ISO_DATE_TIME_ZONE_FORMAT = FastDateFormat.getInstance("yyyy-MM-ddZZ");    public static final FastDateFormat ISO_TIME_FORMAT = FastDateFormat.getInstance("'T'HH:mm:ss");    public static final FastDateFormat ISO_TIME_TIME_ZONE_FORMAT = FastDateFormat.getInstance("'T'HH:mm:ssZZ");    public static final FastDateFormat ISO_TIME_NO_T_FORMAT = FastDateFormat.getInstance("HH:mm:ss");    public static final FastDateFormat ISO_TIME_NO_T_TIME_ZONE_FORMAT = FastDateFormat.getInstance("HH:mm:ssZZ");    public static final FastDateFormat SMTP_DATETIME_FORMAT;    public DateFormatUtils() {    }    public static String formatUTC(long millis, String pattern) {        return format((Date)(new Date(millis)), pattern, DateUtils.UTC_TIME_ZONE, (Locale)null);    }    public static String formatUTC(Date date, String pattern) {        return format((Date)date, pattern, DateUtils.UTC_TIME_ZONE, (Locale)null);    }    public static String formatUTC(long millis, String pattern, Locale locale) {        return format(new Date(millis), pattern, DateUtils.UTC_TIME_ZONE, locale);    }    public static String formatUTC(Date date, String pattern, Locale locale) {        return format(date, pattern, DateUtils.UTC_TIME_ZONE, locale);    }    public static String format(long millis, String pattern) {        return format((Date)(new Date(millis)), pattern, (TimeZone)null, (Locale)null);    }    public static String format(Date date, String pattern) {        return format((Date)date, pattern, (TimeZone)null, (Locale)null);    }    public static String format(Calendar calendar, String pattern) {        return format((Calendar)calendar, pattern, (TimeZone)null, (Locale)null);    }    public static String format(long millis, String pattern, TimeZone timeZone) {        return format((Date)(new Date(millis)), pattern, timeZone, (Locale)null);    }    public static String format(Date date, String pattern, TimeZone timeZone) {        return format((Date)date, pattern, timeZone, (Locale)null);    }    public static String format(Calendar calendar, String pattern, TimeZone timeZone) {        return format((Calendar)calendar, pattern, timeZone, (Locale)null);    }    public static String format(long millis, String pattern, Locale locale) {        return format((Date)(new Date(millis)), pattern, (TimeZone)null, locale);    }    public static String format(Date date, String pattern, Locale locale) {        return format((Date)date, pattern, (TimeZone)null, locale);    }    public static String format(Calendar calendar, String pattern, Locale locale) {        return format((Calendar)calendar, pattern, (TimeZone)null, locale);    }    public static String format(long millis, String pattern, TimeZone timeZone, Locale locale) {        return format(new Date(millis), pattern, timeZone, locale);    }    public static String format(Date date, String pattern, TimeZone timeZone, Locale locale) {        FastDateFormat df = FastDateFormat.getInstance(pattern, timeZone, locale);        return df.format(date);    }    public static String format(Calendar calendar, String pattern, TimeZone timeZone, Locale locale) {        FastDateFormat df = FastDateFormat.getInstance(pattern, timeZone, locale);        return df.format(calendar);    }    static {        SMTP_DATETIME_FORMAT = FastDateFormat.getInstance("EEE, dd MMM yyyy HH:mm:ss Z", Locale.US);    }}

DateUtils类

源码

package com.xinchacha.security.utils;import org.apache.commons.lang3.StringUtils;import org.apache.commons.lang3.time.DateFormatUtils;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.*;/** * @ClassName DateUtils * @Description TODO * @Author yiGeXinDong * @Date 2020/5/11 9:53 * @Version 1.0 **/public class DateUtils   {    public final static int FORMAT_DEFAULT = 0; // 默认格局    /** 日时字符串格局:长格局(如:年份用4位示意) */    public final static int FORMAT_LONG = 1; // 长格局(如:年份用4位示意)    /** 日时字符串格局:短格局(如:年份用2位示意) */    public final static int FORMAT_SHORT = 2; // 短格局(如:年份用2位示意)    /** 默认日期字符串格局 "yyyy-MM-dd" */    public final static String DATE_DEFAULT = "yyyy-MM-dd";    /** 日期字符串格局 "yyyy" */    private final static String DATE_YYYY="yyyy";    /** 日期字符串格局 "mm" */    private final static String DATE_MM="mm";    /** 日期字符串格局 "dd" */    private final static String DATE_DD="dd";    /** 日期字符串格局 "yyyyMM" */    public final static String DATE_YYYYMM = "yyyyMM";    /** 日期字符串格局 "yyyyMMdd" */    public final static String DATE_YYYYMMDD = "yyyyMMdd";    /** 日期字符串格局 "yyyy-MM" */    public final static String DATE_YYYY_MM = "yyyy-MM";    /** 日期字符串格局 "yyyy-MM-dd" */    public final static String DATE_YYYY_MM_DD = "yyyy-MM-dd";    /** 默认日时字符串格局 "yyyy-MM-dd HH:mm:ss" */    public final static String DATETIME_DEFAULT = "yyyy-MM-dd HH:mm:ss";    /** 日时字符串格局 "yyyy-MM-dd HH:mm" */    public final static String DATETIME_YYYY_MM_DD_HH_MM = "yyyy-MM-dd HH:mm";    /** 日时字符串格局 "yyyy-MM-dd HH:mm:ss" */    public final static String DATETIME_YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss";    /** 日时字符串格局 "yyyy-MM-dd HH:mm:ss.SSS" */    public final static String DATETIME_YYYY_MM_DD_HH_MM_SS_SSS = "yyyy-MM-dd HH:mm:ss.SSS";    /** 默认工夫字符串格局 "HH:mm:ss" */    public final static String TIME_DEFAULT = "HH:mm:ss";    /** 默认工夫字符串格局 "HH:mm" */    public final static String TIME_HH_MM = "HH:mm";    /** 默认工夫字符串格局 "HH:mm:ss" */    public final static String TIME_HH_MM_SS = "HH:mm:ss";    public static final long YEAR_NUMBER=365;    /** 分 */    public static final long MINUTE_TTL = 60 * 1000l;    /** 时 */    public static final long HOURS_TTL = 60 * 60 * 1000l;    /** 半天 */    public static final long HALF_DAY_TTL = 12 * 60 * 60 * 1000l;    /** 天 */    public static final long DAY_TTL = 24 * 60 * 60 * 1000l;    /** 月 */    public static final long MONTH_TTL = 30 * 24 * 60 * 60 * 1000l;    /**     * TODO 计算两个工夫差值     * @param startDate,endDate     * @Author XuWenXiao     * @return int(两个工夫相差的天数)     * @throws ParseException     */    public static int daysBetween(Date startDate, Date endDate) throws ParseException {        Calendar calendar = Calendar.getInstance();        calendar.setTime(startDate);        long sTime = calendar.getTimeInMillis();        calendar.setTime(endDate);        long endTime = calendar.getTimeInMillis();        long between_days=(endTime-sTime)/DAY_TTL;        return Integer.parseInt(String.valueOf(between_days));    }    /**     * TODO 获取以后零碎工夫     * @Author XuWenXiao     * @return Date     */    public static Date getNewDate(){        SimpleDateFormat df = new SimpleDateFormat(DATETIME_YYYY_MM_DD_HH_MM_SS);//设置日期格局        Date newDate=null;        try {            newDate=df.parse(df.format(new Date()));        } catch (ParseException e) {            e.printStackTrace();        }        return newDate;    }    /**     * 失去日期字符串 默认格局(yyyy-MM-dd) pattern能够为:"yyyy-MM-dd" "HH:mm:ss" "E"     */    public static String formatDate(Date date, Object... pattern) {        String formatDate = null;        if (pattern != null && pattern.length > 0) {            formatDate = DateFormatUtils.format(date, pattern[0].toString());        } else {            formatDate = DateFormatUtils.format(date, DATE_YYYY_MM_DD);        }        return formatDate;    }    /**     * 失去以后年份字符串 格局(yyyy)     */    public static String getYear() {        return formatDate(new Date(), DATE_YYYY);    }    /**     * 失去以后月份字符串 格局(MM)     */    public static String getMonth() {        return formatDate(new Date(), DATE_MM);    }    /**     * 失去当天字符串 格局(dd)     */    public static String getDay() {        return formatDate(new Date(), DATE_DD);    }    /**     * 获取以后工夫的字符串模式(例如;"201806291135")     * @return 年月日时分     */    public static String getDateToString(){        Calendar c = Calendar.getInstance();        return getYear()+getMonth()+getDay()+c.get(Calendar.HOUR_OF_DAY)+c.get(Calendar.MINUTE);    }    /**     * 获取过来的年数     * @param date     * @return     */    public static Long pastYear(Date date) {        return date==null?null:pastDays(date)/YEAR_NUMBER;    }    /**     * 获取过来的天数     * @param date     * @return     */    public static long pastDays(Date date) {        long t = new Date().getTime()-date.getTime();        return t/DAY_TTL;    }    /**     * 获取过来的小时     * @param date     * @return     */    public static long pastHour(Date date) {        long t = new Date().getTime()-date.getTime();        return t/HOURS_TTL;    }    /**     * 获取过来的分钟     * @param date     * @return     */    public static long pastMinutes(Date date) {        long t = new Date().getTime()-date.getTime();        return t/MINUTE_TTL;    }    /**     * 获取两个日期之间的天数     *     * @param before     * @param after     * @return     */    public static double getDistanceOfTwoDate(Date before, Date after) {        long beforeTime = before.getTime();        long afterTime = after.getTime();        return (afterTime - beforeTime) /DAY_TTL;    }    /**     * 依据身份证计算出身日期     *     */    /**     * 通过身份证号码获取出生日期、性别、年齡     * @param certificateNo     * @return 返回的出生日期格局:1990-01-01   性别格局:2-女,1-男     */    public static Map<String, String> getBirAgeSex(String certificateNo) {        System.out.println(certificateNo);        String birthday = "";        String age = "";        String sexCode = "";        int year = Calendar.getInstance().get(Calendar.YEAR);        char[] number = certificateNo.toCharArray();        boolean flag = true;        if (number.length == 15) {            for (int x = 0; x < number.length; x++) {                if (!flag) return new HashMap<String, String>();                flag = Character.isDigit(number[x]);            }        } else if (number.length == 18) {            for (int x = 0; x < number.length - 1; x++) {                if (!flag) return new HashMap<String, String>();                flag = Character.isDigit(number[x]);            }        }        if (flag && certificateNo.length() == 15) {            birthday = "19" + certificateNo.substring(6, 8) + "-"                    + certificateNo.substring(8, 10) + "-"                    + certificateNo.substring(10, 12);            sexCode = Integer.parseInt(certificateNo.substring(certificateNo.length() - 3, certificateNo.length())) % 2 == 0 ? "2" : "1";            age = (year - Integer.parseInt("19" + certificateNo.substring(6, 8))) + "";        } else {            birthday = certificateNo.substring(6, 10) + "-"                    + certificateNo.substring(10, 12) + "-"                    + certificateNo.substring(12, 14);            sexCode = Integer.parseInt(certificateNo.substring(certificateNo.length() - 4, certificateNo.length() - 1)) % 2 == 0 ? "2" : "1";            age = (year - Integer.parseInt(certificateNo.substring(6, 10))) + "";        }        Map<String, String> map = new HashMap<String, String>();        map.put("birthday", birthday);        map.put("age", age);        map.put("sexCode", sexCode);        return map;    }    /**     * 依据身份证的号码算出以后身份证持有者的年龄 18位身份证     * @author 黄涛     * @return     * @throws Exception     */    public static int getCarAge(String birthday){        String year = birthday.substring(0, 4);//失去年份        String yue = birthday.substring(4, 6);//失去月份        //String day = birthday.substring(6, 8);//        Date date = new Date();// 失去以后的零碎工夫        SimpleDateFormat format = new SimpleDateFormat(DATE_YYYY_MM_DD);        String fYear = format.format(date).substring(0, 4);// 以后年份        String fYue = format.format(date).substring(5, 7);// 月份        // String fday=format.format(date).substring(8,10);        int age = 0;        if (Integer.parseInt(yue) <= Integer.parseInt(fYue)) { // 以后月份大于用户出身的月份示意已过生            age = Integer.parseInt(fYear) - Integer.parseInt(year) + 1;        } else {// 以后用户还没过生            age = Integer.parseInt(fYear) - Integer.parseInt(year);        }        return age;    }    /**     *     * 依据身份证获取性别     */    public static String getCarSex(String CardCode){        String sex;        if (Integer.parseInt(CardCode.substring(16).substring(0, 1)) % 2 == 0) {// 判断性别            sex = "2";        } else {            sex = "1";        }        return sex;    }    /**     * 依据传入的日历型日期,计算出执行的工夫值(准确版)     * @param beginTime     * @param endTime     * @return     */    public static String countExecTimeToString_exact(Calendar beginTime,Calendar endTime)    {//计算两个日期类型之间的差值(单位:毫秒)        Long timeDispersion = endTime.getTimeInMillis() - beginTime.getTimeInMillis();        String tmpMsg = "耗时: ";//拼写输入的字符串        int timeNum = 0;//记录时间的数值(几小时、几分、几秒)        if(timeDispersion >= (HOURS_TTL))//判断是否足够一小时        {//若足够则计算有几小时            timeNum = (int) (timeDispersion/HOURS_TTL);            tmpMsg += timeNum + "时";//拼写输入几小时            timeDispersion = timeDispersion - (timeNum*HOURS_TTL);//减去小时数(这样剩下的就是分钟数了)        }        if(timeDispersion >= (MINUTE_TTL))//判断是否足够一分钟        {//若足够则计算有几分钟            timeNum = (int) (timeDispersion/MINUTE_TTL);            tmpMsg += timeNum + "分";//拼写输入几分钟            timeDispersion = timeDispersion - (timeNum*MINUTE_TTL);//减去分钟数(这样就剩下秒数了)        }        if(timeDispersion >= 1000)//判断是否足够一秒        {//若足够则计算几秒            timeNum = (int) (timeDispersion/1000);            tmpMsg +=  timeNum + "秒";//拼写输入秒数            timeDispersion = timeDispersion - timeNum*1000;//减去秒数(这样就剩下毫秒数了)        }        tmpMsg += timeDispersion + "毫秒";//拼写输入毫秒数        return tmpMsg;    }//重载办法,返回Long类型(毫秒)    public static Long countExecTimeToLong_exact(Calendar beginTime,Calendar endTime)    {//间接返回毫秒数        return (endTime.getTimeInMillis() - beginTime.getTimeInMillis());    }    /**     * 依据传入的long类型日期,计算出执行的工夫值(准确版)     * @param beginTime     * @param endTime     * @return     */    public static String countExecTimeToString_exact(Long beginTime,Long endTime)    {//计算两个日期类型之间的差值(单位:毫秒)        Long timeDispersion = endTime - beginTime;        String tmpMsg = "耗时: ";//拼写输入的字符串        int timeNum = 0;//记录时间的数值(几小时、几分、几秒)        if(timeDispersion >= (HOURS_TTL))//判断是否足够一小时        {//若足够则计算有几小时            timeNum = (int) (timeDispersion/(HOURS_TTL));            tmpMsg += timeNum + "时";//拼写输入几小时            timeDispersion = timeDispersion - (timeNum*HOURS_TTL);//减去小时数(这样剩下的就是分钟数了)        }        if(timeDispersion >= (MINUTE_TTL))//判断是否足够一分钟        {//若足够则计算有几分钟            timeNum = (int) (timeDispersion/(MINUTE_TTL));            tmpMsg += timeNum + "分";//拼写输入几分钟            timeDispersion = timeDispersion - (timeNum*MINUTE_TTL);//减去分钟数(这样就剩下秒数了)        }        if(timeDispersion >= 1000)//判断是否足够一秒        {//若足够则计算几秒            timeNum = (int) (timeDispersion/1000);            tmpMsg +=  timeNum + "秒";//拼写输入秒数            timeDispersion = timeDispersion - timeNum*1000;//减去秒数(这样就剩下毫秒数了)        }        tmpMsg += timeDispersion + "毫秒";//拼写输入毫秒数        return tmpMsg;    }    /**     * 获取指定年度全副月份汇合<br>     * 格局为yyyy-MM     * @author 王鹏     * @version 2019年11月16日 下午4:52:55     * @param year 年度     * @return     */    public static List<String> getYearMonthByYear(String year) {        List<String> monthList =new ArrayList<>();        for (int i = 1; i <= 12; i++) {            monthList.add(year+"-"+(i<10?"0":"")+i);        }        return monthList;    }    /**     * 获取下个月     * dateStr 日期     * format 格局:yyyy-MM或yyyyMM     * @return     */    public static String getPreMonth(String dateStr,String format) {        String preMonth = "";        SimpleDateFormat sdf = new SimpleDateFormat(format);        Date date;        try {            date = sdf.parse(dateStr);            Calendar calendar = Calendar.getInstance();            calendar.setTime(date);            calendar.add(calendar.MONTH, 1);            sdf.format(calendar.getTime());        } catch (ParseException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return preMonth;    }    /**     * 获取下个月     * dateStr 日期     * format 格局:yyyy-MM或yyyyMM     * @return     */    public static String getPreMonthFormat(String dateStr,String format) {        String preMonth = "";        SimpleDateFormat sdf = new SimpleDateFormat(format);        Date date;        try {            date = sdf.parse(dateStr);            Calendar calendar = Calendar.getInstance();            calendar.setTime(date);            calendar.add(calendar.MONTH, 1);            preMonth= sdf.format(calendar.getTime());        } catch (ParseException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return preMonth;    }    /**     * 日期比拟     * date1比date2大true     */    public static boolean dateSize(String aDate,String bDate,SimpleDateFormat format) {        boolean str = false;        try {            if(StringUtils.isNotBlank(aDate)&&StringUtils.isNotBlank(bDate)) {                Date date1 = format.parse(aDate);                Date date2 = format.parse(bDate);                str = date1.after(date2);            }        } catch (ParseException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        return str;    }}

自定义DateUtil类

package com.jd.survey.common.utils;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import org.apache.commons.lang3.StringUtils;import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class DateUtil {    private static final Logger log = LoggerFactory.getLogger(DateUtil.class);    private static final String default_format = "yyyy-MM-dd HH:mm:ss";    private static final String format_yyyy = "yyyy";    private static final String format_yyyyMM = "yyyy-MM";    private static final String format_yyyyMMdd = "yyyy-MM-dd";    private static final String format_yyyyMMddHH = "yyyy-MM-dd HH";    private static final String format_yyyyMMddHHmm = "yyyy-MM-dd HH:mm";    private static final String format_yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";    public static final int MONDAY = 1;    public static final int TUESDAY = 2;    public static final int WEDNESDAY = 3;    public static final int THURSDAY = 4;    public static final int FRIDAY = 5;    public static final int SATURDAY = 6;    public static final int SUNDAY = 7;    public static final int JANUARY = 1;    public static final int FEBRUARY = 2;    public static final int MARCH = 3;    public static final int APRIL = 4;    public static final int MAY = 5;    public static final int JUNE = 6;    public static final int JULY = 7;    public static final int AUGUST = 8;    public static final int SEPTEMBER = 9;    public static final int OCTOBER = 10;    public static final int NOVEMBER = 11;    public static final int DECEMBER = 12;        public static final Date parseDate(String strDate, String format) {        SimpleDateFormat df = null;        Date date = null;        df = new SimpleDateFormat(format);        try {            date = df.parse(strDate);        } catch (ParseException e) {}        return (date);    }    public static Date now() {        return new Date();    }    public static int getYear(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        return calendar.get(1);    }    public static int getDayOfMonth(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        return calendar.get(5);    }    public static int getMonthOfYear(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        return calendar.get(2) + 1;    }    public static int getDayOfWeek(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        calendar.setFirstDayOfWeek(2);        int day = calendar.get(7) - 1;        if (day == 0) {            day = 7;        }        return day;    }    public static Date getTodayEndTime(){        Calendar calendar = Calendar.getInstance();        calendar.setTime(new Date());        calendar.set(Calendar.HOUR_OF_DAY,23);        calendar.set(Calendar.MINUTE,59);        calendar.set(Calendar.SECOND,59);        return calendar.getTime();    }    public static int getDayOfYear(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        return calendar.get(6);    }    public static int getHourField(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        return calendar.get(11);    }    public static int getMinuteField(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        return calendar.get(12);    }    public static int getSecondField(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        return calendar.get(13);    }    public static int getMillisecondField(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        return calendar.get(14);    }    public static long getDays(Date datetime) {        return datetime.getTime() / 86400000L;    }    public static long getHours(Date datetime) {        return datetime.getTime() / 3600000L;    }    public static long getMinutes(Date datetime) {        return datetime.getTime() / 60000L;    }    public static long getSeconds(Date datetime) {        return datetime.getTime() / 1000L;    }    public static long getMilliseconds(Date datetime) {        return datetime.getTime();    }    public static int getWeekOfMonth(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        calendar.setFirstDayOfWeek(2);        return calendar.get(4);    }    public static int getWeekOfYear(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        calendar.setFirstDayOfWeek(2);        return calendar.get(3);    }    public static int getMaxDateOfMonth(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        return calendar.getActualMaximum(5);    }    public static int getMaxDateOfYear(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        return calendar.getActualMaximum(6);    }    public static int getMaxWeekOfMonth(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        calendar.setFirstDayOfWeek(2);        return calendar.getActualMaximum(4);    }    public static int getMaxWeekOfYear(Date datetime) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        calendar.setFirstDayOfWeek(2);        return calendar.getActualMaximum(3);    }    public static Date toDatetime(String datetimeString, String format) {        Date result = null;        try {            SimpleDateFormat simpleDateFormat = new SimpleDateFormat(format);            result = simpleDateFormat.parse(datetimeString);        } catch (Exception e) {            log.error("Fail to parse datetime.", e);        }        return result;    }    public static String toString(Date datetime) {        return toString(datetime, null);    }    public static String toString(Date datetime, String format) {        String result = null;        SimpleDateFormat simpleDateFormat = null;        try {            if (StringUtils.isNoneBlank(new CharSequence[] { format })) {                simpleDateFormat = new SimpleDateFormat(format);            } else {                simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");            }            result = simpleDateFormat.format(datetime);        } catch (Exception e) {            log.error("Fail to parse datetime.", e);        }        return result;    }    public static int diffYears(Date datetime1, Date datetime2) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime1);        int month1 = calendar.get(1);        calendar.setTime(datetime2);        int month2 = calendar.get(1);        return month1 - month2;    }    public static int diffMonths(Date datetime1, Date datetime2) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime1);        int month1 = calendar.get(2);        calendar.setTime(datetime2);        int month2 = calendar.get(2);        return month1 - month2;    }    public static long diffDays(Date datetime1, Date datetime2) {        return (datetime1.getTime() - datetime2.getTime()) / 86400000L;    }    public static long diffDaysByCalendar(Date datetime1, Date datetime2)            throws Exception {        try {            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");            return diffDays(sdf.parse(sdf.format(datetime1)),                    sdf.parse(sdf.format(datetime2)));        } catch (Exception e) {            throw e;        }    }    public static long diffHours(Date datetime1, Date datetime2) {        return (datetime1.getTime() - datetime2.getTime()) / 3600000L;    }    public static long diffMiniutes(Date datetime1, Date datetime2) {        return (datetime1.getTime() - datetime2.getTime()) / 60000L;    }    public static long diffSeconds(Date datetime1, Date datetime2) {        return (datetime1.getTime() - datetime2.getTime()) / 1000L;    }    public static Date add(Date datetime1, Date datetime2) {        Calendar calendar = Calendar.getInstance();        Date date = new Date(datetime1.getTime() + datetime2.getTime());        return date;    }    public static Date minus(Date datetime1, Date datetime2) {        Calendar calendar = Calendar.getInstance();        Date date = new Date(datetime1.getTime() - datetime2.getTime());        return date;    }    public static boolean isBefore(Date datetime1, Date datetime2) {        return datetime2.getTime() - datetime1.getTime() > 0L;    }    public static boolean isBeforeOrEqual(Date datetime1, Date datetime2) {        return datetime2.getTime() - datetime1.getTime() >= 0L;    }    public static boolean isEqual(Date datetime1, Date datetime2) {        return datetime2.getTime() == datetime1.getTime();    }    public static boolean isAfter(Date datetime1, Date datetime2) {        return datetime2.getTime() - datetime1.getTime() < 0L;    }    public static boolean isAfterOrEqual(Date datetime1, Date datetime2) {        return datetime2.getTime() - datetime1.getTime() <= 0L;    }    public static Date addMilliseconds(Date datetime, int milliseconds) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        calendar.roll(14, milliseconds);        return calendar.getTime();    }    public static Date addSeconds(Date datetime, int seconds) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        calendar.roll(13, seconds);        return calendar.getTime();    }    public static Date addMinutes(Date datetime, int minutes) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        calendar.roll(12, minutes);        return calendar.getTime();    }    public static Date addHours(Date datetime, int hours) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        calendar.roll(10, hours);        return calendar.getTime();    }    public static Date addDays(Date datetime, int days) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        calendar.roll(5, days);        return calendar.getTime();    }    public static Date addMonths(Date datetime, int months) {        Calendar calendar = Calendar.getInstance();        calendar.setTime(datetime);        calendar.roll(2, months);        return calendar.getTime();    }    public static boolean isSameSecond(Date datetime1, Date datetime2) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");        return sdf.format(datetime1).equals(sdf.format(datetime2));    }    public static boolean isSameMinute(Date datetime1, Date datetime2) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");        return sdf.format(datetime1).equals(sdf.format(datetime2));    }    public static boolean isSameHour(Date datetime1, Date datetime2) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH");        return sdf.format(datetime1).equals(sdf.format(datetime2));    }    public static boolean isSameDay(Date datetime1, Date datetime2) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");        return sdf.format(datetime1).equals(sdf.format(datetime2));    }    public static boolean isSameMonth(Date datetime1, Date datetime2) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");        return sdf.format(datetime1).equals(sdf.format(datetime2));    }    public static boolean isSameYear(Date datetime1, Date datetime2) {        SimpleDateFormat sdf = new SimpleDateFormat("yyyy");        return sdf.format(datetime1).equals(sdf.format(datetime2));    }    public static boolean isSameWeek(Date datetime1, Date datetime2) {        boolean result = false;        int year1 = getYear(datetime1);        int year2 = getYear(datetime2);        int month1 = getMonthOfYear(datetime1);        int month2 = getMonthOfYear(datetime2);        int dayOfWeek1 = getDayOfWeek(datetime1);        int dayOfWeek2 = getDayOfWeek(datetime2);        long diffDays = diffDays(datetime1, datetime2);        Calendar calendar = Calendar.getInstance();        calendar.setFirstDayOfWeek(2);        if (Math.abs(diffDays) < calendar.getMaximum(7)) {            if (year1 == year2) {                if (getWeekOfYear(datetime1) == getWeekOfYear(datetime2)) {                    result = true;                }            } else if ((year1 - year2 == 1) && (month1 == 1) && (month2 == 12)) {                calendar.set(year1, 0, 1);                int dayOfWeek = getDayOfWeek(calendar.getTime());                if ((dayOfWeek2 < dayOfWeek) && (dayOfWeek <= dayOfWeek1)) {                    result = true;                }            } else if ((year2 - year1 == 1) && (month1 == 12) && (month2 == 1)) {                calendar.set(year2, 0, 1);                int dayOfWeek = getDayOfWeek(calendar.getTime());                if ((dayOfWeek1 < dayOfWeek) && (dayOfWeek <= dayOfWeek2)) {                    result = true;                }            }        }        return result;    }}

参考资料

Java中罕用的Date类型
https://blog.csdn.net/qiuwenjie123/article/details/79846621
Calendar类简介
https://blog.csdn.net/qq_42815754/article/details/95896544
java中time的工夫类
https://blog.csdn.net/ppppppushcar/article/details/113704597
Java日期格式化:DateFormat类和SimpleDateFormat类详解
https://blog.csdn.net/eguid/article/details/116054105