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 的字段數字,指示一天中的小時。