java如何獲取當前時間到第二天凌晨的秒數

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/qq_34560242/article/details/79475190

java如何獲取當前時間到第二天凌晨的秒數

原因:前兩天寫了一個接口,redis緩存有效時間設置到第二天的凌晨中遇到一個坑,這裏記錄一下。

坑在這裏

    public Long getSecondsNextEarlyMorning() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_YEAR, 1);
        // 坑就在這裏
        cal.set(Calendar.HOUR, 0);
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
    }

上面的代碼中,如果當前時間超過中午12:00,則返回的結果是當前時間到第二天中午12:00的秒數;
如果當前時間不超過中午12:00,則返回的結果是到第二天凌晨的秒數,也就是我想要的結果。

解決方案

    public Long getSecondsNextEarlyMorning() {
        Calendar cal = Calendar.getInstance();
        cal.add(Calendar.DAY_OF_YEAR, 1);
        // 改成這樣就好了
        cal.set(Calendar.HOUR_OF_DAY, 0);      
        cal.set(Calendar.SECOND, 0);
        cal.set(Calendar.MINUTE, 0);
        cal.set(Calendar.MILLISECOND, 0);
        return (cal.getTimeInMillis() - System.currentTimeMillis()) / 1000;
    }

這樣無論當前時間是否超過中午12:00,獲取的都是到第二天凌晨的秒數。

其中JDK文檔是這樣解釋的:

Calendar.HOUR:get 和 set 的字段數字,指示上午或下午的小時。
Calendar.HOUR_OF_DAY :get 和 set 的字段數字,指示一天中的小時。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章