Java8時(shí)間工具類(lèi)

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
import java.time.temporal.TemporalUnit;
import java.util.*;

/**
 * Java8時(shí)間方法LocalDate和LocalDateTime
 * getYear()    int    獲取當(dāng)前日期的年份
 * getMonth()    Month    獲取當(dāng)前日期的月份對(duì)象
 * getMonthValue()    int    獲取當(dāng)前日期是第幾月
 * getDayOfWeek()    DayOfWeek    表示該對(duì)象表示的日期是星期幾
 * getDayOfMonth()    int    表示該對(duì)象表示的日期是這個(gè)月第幾天
 * getDayOfYear()    int    表示該對(duì)象表示的日期是今年第幾天
 * withYear(int year)    LocalDate    修改當(dāng)前對(duì)象的年份
 * withMonth(int month)    LocalDate    修改當(dāng)前對(duì)象的月份
 * withDayOfMonth(int dayOfMonth)    LocalDate    修改當(dāng)前對(duì)象在當(dāng)月的日期
 * isLeapYear()    boolean    是否是閏年
 * lengthOfMonth()    int    這個(gè)月有多少天
 * lengthOfYear()    int    該對(duì)象表示的年份有多少天(365或者366)
 * plusYears(long yearsToAdd)    LocalDate    當(dāng)前對(duì)象增加指定的年份數(shù)
 * plusMonths(long monthsToAdd)    LocalDate    當(dāng)前對(duì)象增加指定的月份數(shù)
 * plusWeeks(long weeksToAdd)    LocalDate    當(dāng)前對(duì)象增加指定的周數(shù)
 * plusDays(long daysToAdd)    LocalDate    當(dāng)前對(duì)象增加指定的天數(shù)
 * minusYears(long yearsToSubtract)    LocalDate    當(dāng)前對(duì)象減去指定的年數(shù)
 * minusMonths(long monthsToSubtract)    LocalDate    當(dāng)前對(duì)象減去注定的月數(shù)
 * minusWeeks(long weeksToSubtract)    LocalDate    當(dāng)前對(duì)象減去指定的周數(shù)
 * minusDays(long daysToSubtract)    LocalDate    當(dāng)前對(duì)象減去指定的天數(shù)
 * compareTo(ChronoLocalDate other)    int    比較當(dāng)前對(duì)象和other對(duì)象在時(shí)間上的大小作媚,返回值如果為正纸泡,則當(dāng)前對(duì)象時(shí)間較晚弟灼,
 * isBefore(ChronoLocalDate other)    boolean    比較當(dāng)前對(duì)象日期是否在other對(duì)象日期之前
 * isAfter(ChronoLocalDate other)    boolean    比較當(dāng)前對(duì)象日期是否在other對(duì)象日期之后
 * isEqual(ChronoLocalDate other)    boolean    比較兩個(gè)日期對(duì)象是否相等
 */
public class DateUtils4Java8 {
    public static final String DATE_FORMAT_FULL = "yyyy-MM-dd HH:mm:ss";

    public static final String DATE_FORMAT_SHORT = "yyyy-MM-dd";

    public static final String DATE_FORMAT_COMPACT = "yyyyMMdd";

    public static final String DATE_FORMAT_COMPACTFULL = "yyyyMMddHHmmss";

    public static final String DATE_FORMAT_FULL_MSEL = "yyyyMMddHHmmssSSSS";

    public static final String DATE_YEAR_MONTH = "yyyyMM";

    public static final String DATE_FORMAT_FULL_MSE = "yyyyMMddHHmmssSSS";


    /**
     * 獲取系統(tǒng)當(dāng)前日期
     *
     * @return
     */
    public static Date getCurrentDate() {
        return new Date();
    }

    /**
     * 獲取系統(tǒng)當(dāng)前日期
     *
     * @return
     */
    public static LocalDateTime getCurrentLocalDateTime() {
        return LocalDateTime.now();
    }

    /**
     * 根據(jù)時(shí)間格式返回對(duì)應(yīng)的String類(lèi)型的時(shí)間
     *
     * @param format
     * @return
     */
    public static String getCurDateTime(String format) {
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        String dataTime = now.format(dateTimeFormatter);
        return dataTime;
    }

    /**
     * 得到當(dāng)前日期
     *
     * @return String 當(dāng)前日期 yyyy-MM-dd HH:mm:ss格式
     * @author kevin
     */
    public static String getCurDateTimeFull() {
        return getCurDateTime(DATE_FORMAT_FULL);
    }


    /**
     * 得到當(dāng)前日期
     *
     * @return String 當(dāng)前日期 yyyyMMddHHmmss格式
     * @author kevin
     */
    public static String getCurDateTime1() {
        return getCurDateTime(DATE_FORMAT_FULL);
    }

    /**
     * 得到當(dāng)前日期YYYYMM格式
     *
     * @return String 當(dāng)前日期 yyyyMM格式
     * @author kevin
     */
    public static String getCurDateYYYYMM() {
        return getCurDateTime(DATE_YEAR_MONTH);
    }


    /**
     * 得到當(dāng)前日期
     *
     * @return String 當(dāng)前日期 yyyyMMdd格式
     * @author kevin
     */
    public static String getCurDateYYYYMMDD() {
        return getCurDateTime(DATE_FORMAT_COMPACT);
    }

    /**
     * 判斷是否是今天
     *
     * @param strDate
     * @return
     */
    public static boolean isCurrentDay(String strDate) {
        boolean bRet = false;
        LocalDate strLocalDate = LocalDate.parse(strDate);
        if (LocalDate.now().getYear() == strLocalDate.getYear()) {
            MonthDay monthDay = MonthDay.from(strLocalDate);
            MonthDay today = MonthDay.from(LocalDate.now());
            return monthDay.equals(today);
        }
        return bRet;
    }

    /**
     * 獲取幾小時(shí)后的時(shí)間
     *
     * @param hour
     * @param format
     * @return
     */
    public static String getAfterDateTime(int hour, String format) {
        LocalTime localTime = LocalTime.now().plusHours(hour);
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        String dataTime = localTime.format(dateTimeFormatter);
        return dataTime;
    }


    /**
     * 當(dāng)前日期時(shí)間戳(yyyyMMddHHmmssSSSS)
     *
     * @return
     * @author liangxuekai
     */
    public static String getTimeStamp() {
        LocalDateTime now = LocalDateTime.now();
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(DATE_FORMAT_FULL_MSEL);
        return now.format(dateTimeFormatter);
    }

    /**
     * 日期轉(zhuǎn)字符串
     *
     * @return String
     * @author kevin
     */
    public static String parseDateToString(Date thedate, String format) {
        if (thedate != null) {
            Instant instant = thedate.toInstant();
            ZoneId zone = ZoneId.systemDefault();
            LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, zone);
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
            return localDateTime.format(dateTimeFormatter);
        }
        return null;
    }

    /**
     * parseDateToString(Date thedate, String format)的重載方法
     *
     * @param thedate
     * @return
     */
    public static String parseDateToString(Date thedate) {
        // String format = "yyyy-MM-dd";
        return parseDateToString(thedate, DATE_FORMAT_FULL);
    }

    /**
     * 字符串轉(zhuǎn)日期
     *
     * @return Date
     * @author kevin
     */
    public static Date parseStringToDate(String thedate, String format) {
        DateFormat sdf = new SimpleDateFormat(format);
        Date dd1 = null;
        try {
            dd1 = sdf.parse(thedate);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return dd1;
    }

    /**
     * 由String型日期轉(zhuǎn)成format形式String
     *
     * @param format1 原先格式
     * @param format2 轉(zhuǎn)化格式
     * @return String
     * @author kevin
     */
    public static String changeFormatDateString(String format1, String format2, String strDate) {
        if (strDate == null)
            return "";
        if (strDate.length() >= format1.length() && format1.length() >= format2.length()) {
            return parseDateToString(parseStringToDate(strDate, format1), format2);
        }
        return strDate;
    }

    /**
     * 得到當(dāng)前日期的前N天時(shí)間 yyyymmdd
     *
     * @param format
     * @param day
     * @return
     */
    public static String beforeNDaysDate(String format, int day) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        if (day > 0) {
            return LocalDateTime.now().minusDays(day).format(dateTimeFormatter);
        }
        return null;
    }

    /**
     * 獲得N個(gè)月后的日期
     * <p>
     * theDate 日期
     * <p>
     * int month 月數(shù)
     * <p>
     * format 格式
     */
    public static String afterNMonthDate(String theDate, int month, String format) {

        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(theDate,dateTimeFormatter)
                .plusMonths(month)
                .format(dateTimeFormatter);

    }

    /**
     * 得到N天后的日期
     *
     * @param theDate 某日期
     *                格式 yyyy-MM-dd
     * @param nDayNum N天
     * @return String N天后的日期
     * @author kevin
     */
    public static String afterNDaysDate(String theDate, Integer nDayNum, String format) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);

        return LocalDateTime.parse(theDate,dateTimeFormatter)
                .plusDays(nDayNum)
                .format(dateTimeFormatter);
    }

    /**
     * 得到N小時(shí)后的日期
     *
     * @param theDate  時(shí)間
     * @param nHourNum N小時(shí)數(shù)
     * @param format   時(shí)間格式
     * @return
     */
    public static String afterNHoursDate(String theDate, Integer nHourNum, String format) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(theDate,dateTimeFormatter)
                .plusHours(nHourNum)
                .format(dateTimeFormatter);
    }

    /**
     * 得到N分鐘后的日期
     *
     * @param theDate
     * @param nMinNum
     * @param format
     * @return
     */
    public static String afterNMinsDate(String theDate, Integer nMinNum, String format) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(theDate,dateTimeFormatter)
                .plusMinutes(nMinNum)
                .format(dateTimeFormatter);
    }

    /**
     * 得到N秒后的日期
     * @param theDate
     * @param nSecNum
     * @param format
     * @return
     */
    public static String afterNSecondsDate(String theDate, Integer nSecNum, String format) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(format);
        return LocalDateTime.parse(theDate,dateTimeFormatter)
                .plusSeconds(nSecNum)
                .format(dateTimeFormatter);
    }

    // 比較兩個(gè)字符串格式日期大小,帶格式的日期
    public static boolean isBefore(String strdat1, String strdat2, String format) {
        try {
            Date dat1 = parseStringToDate(strdat1, format);
            Date dat2 = parseStringToDate(strdat2, format);
            return dat1.before(dat2);
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

    // 比較兩個(gè)字符串格式日期大小,帶格式的日期,返回int
    public static long isBefore_int(String strdat1, String strdat2, String format) {
        long result = 0;
        try {
            Date dat1 = parseStringToDate(strdat1, format);
            Date dat2 = parseStringToDate(strdat2, format);
            return dat2.getTime() - dat1.getTime();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return result;
    }
    

    /*
     * 得到上一個(gè)月或者下一個(gè)月的日期
     */
    public static String getDayafterMonth(String theDate, int month, String formatStr) {
        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(formatStr);
        return LocalDateTime.parse(theDate).plusMonths(month).format(dateTimeFormatter);
       /* Calendar now = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat(formatStr);
        Date dat1 = parseStringToDate(theDate, formatStr);
        now.setTime(dat1);
        sdf.setTimeZone(TimeZone.getDefault());
        now.add(Calendar.MONTH, month);
        return sdf.format(now.getTime());*/
    }

    /**
     * 將秒轉(zhuǎn)換為小時(shí)分秒等
     *
     * @param sec
     * @return
     */
    public String changeTime(int sec) {
        String temp = "";
        if (sec < 60) {
            temp = "" + sec + "秒";
        } else if (sec < 3600) {
            temp = "" + sec / 60 + "分" + sec % 60 + "秒";
        } else {
            temp = "" + sec / 3600 + "小時(shí)" + (sec % 3600) / 60 + "分" + sec % 60 + "秒";
        }
        return temp;
    }

    /**
     * 方法描述:
     * 計(jì)算兩個(gè)日期相差天數(shù)
     *
     * @param end   結(jié)束日期
     * @param start 開(kāi)始日期
     * @return 作者:liangxuekai
     * 日期:2018 2018年1月31日
     */
    public static int getSubDays(String end, String start) {
        LocalDate startDate = LocalDate.parse(start);
        LocalDate endDate = LocalDate.parse(end);
        Long between = ChronoUnit.DAYS.between(startDate, endDate);
        return between.intValue();
    }


    public static String getTimeDiff(Date time1, Date time2) throws Exception {
        long l = time1.getTime() - time2.getTime();
        String returnStr = "";
        long day = l / (24 * 60 * 60 * 1000);
        if (day > 0) {
            returnStr += (day + "天");
        }
        long hour = (l / (60 * 60 * 1000) - day * 24);
        if (hour > 0) {
            returnStr += (hour + "小時(shí)");
        }
        long min = ((l / (60 * 1000)) - day * 24 * 60 - hour * 60);
        if (min > 0) {
            returnStr += (min + "分");
        }
        long s = (l / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
        if (s > 0) {
            returnStr += (s + "秒");
        }
        return returnStr;
    }


}`
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市涮帘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疮鲫,老刑警劉巖俊犯,帶你破解...
    沈念sama閱讀 218,607評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件燕侠,死亡現(xiàn)場(chǎng)離奇詭異立莉,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)杖虾,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,239評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)坟比,“玉大人,你說(shuō)我怎么就攤上這事柠衅〖眨” “怎么了贷祈?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,960評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵势誊,是天一觀的道長(zhǎng)粟耻。 經(jīng)常有香客問(wèn)我眉踱,道長(zhǎng),這世上最難降的妖魔是什么册烈? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,750評(píng)論 1 294
  • 正文 為了忘掉前任赏僧,我火速辦了婚禮谈宛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘窑滞。我一直安慰自己哀卫,他們只是感情好撬槽,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,764評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布侄柔。 她就那樣靜靜地躺著,像睡著了一般移剪。 火紅的嫁衣襯著肌膚如雪纵苛。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,604評(píng)論 1 305
  • 那天取试,我揣著相機(jī)與錄音瞬浓,去河邊找鬼烙博。 笑死瑟蜈,一個(gè)胖子當(dāng)著我的面吹牛铺根,可吹牛的內(nèi)容都是我干的乔宿。 我是一名探鬼主播,決...
    沈念sama閱讀 40,347評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼掂林,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼泻帮!你這毒婦竟也來(lái)了计寇?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,253評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤元莫,失蹤者是張志新(化名)和其女友劉穎蝶押,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體茎截,經(jīng)...
    沈念sama閱讀 45,702評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稼虎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,893評(píng)論 3 336
  • 正文 我和宋清朗相戀三年招刨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了沉眶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,015評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柳击,死狀恐怖片习,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情状知,我是刑警寧澤孽查,帶...
    沈念sama閱讀 35,734評(píng)論 5 346
  • 正文 年R本政府宣布盲再,位于F島的核電站,受9級(jí)特大地震影響答朋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜禽绪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,352評(píng)論 3 330
  • 文/蒙蒙 一丐一、第九天 我趴在偏房一處隱蔽的房頂上張望淹冰。 院中可真熱鬧,春花似錦柠衍、人聲如沸晶乔。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,934評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至回还,卻和暖如春叹洲,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蝗柔。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,052評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工民泵, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坎缭。 一個(gè)月前我還...
    沈念sama閱讀 48,216評(píng)論 3 371
  • 正文 我出身青樓签钩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親铅檩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,969評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法兔沃,內(nèi)部類(lèi)的語(yǔ)法,繼承相關(guān)的語(yǔ)法乒疏,異常的語(yǔ)法,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,639評(píng)論 18 399
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理窍侧,服務(wù)發(fā)現(xiàn)伟件,斷路器,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • ¥開(kāi)啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開(kāi)一個(gè)線(xiàn)程谴返,因...
    小菜c閱讀 6,424評(píng)論 0 17
  • 本來(lái)這幾天感覺(jué)和兒子的關(guān)系還不錯(cuò)亏镰,兒子也沒(méi)發(fā)脾氣拯爽,不過(guò)今天因?yàn)槲腋杏X(jué)源點(diǎn)不對(duì)钧忽,有點(diǎn)想越級(jí)跳頻了,導(dǎo)致兒子情緒激動(dòng)桃煎。...
    燕子重生scy閱讀 174評(píng)論 0 1
  • 首先为迈,@空中樓閣Z,我今天就著實(shí)被你橫向領(lǐng)導(dǎo)了一把葫辐。 在我整個(gè)白天都沒(méi)有半點(diǎn)思路伴郁,已經(jīng)準(zhǔn)備放棄晨讀感悟時(shí),你的及時(shí)...
    湯林萌主閱讀 210評(píng)論 8 7