java的系統時間,怎么計算從現在到凌晨還剩下多少時間?


Apache commons-lang3

long milliSecondsLeftToday = 86400000 - 
    DateUtils.getFragmentInMilliseconds(Calendar.getInstance(), Calendar.DATE);

 

 

System.currentTimeMillis() 是零時區的時間戳,所以你要加上8個小時才行。
最基礎的寫法:

public class Main {
    public static void main(String[] args) {
        long hour = 60 * 60 * 1000;
        long time = System.currentTimeMillis();
        System.out.println(time);
        time += 8 * hour; 
        System.out.println(time);
        time %= 24 * hour;
        System.out.printf("%02d:%02d\n", time / hour, time % hour / 60000);
        time = 24 * hour - time;
        System.out.printf("%02d:%02d\n", time / hour, time % hour / 60000);
    }
}

在當前時區有夏令時的情況下,另外一個用System.currentTimeMillis() 的答案是不能正確處理的,比如15年美國夏令時從3月8號凌晨2點開始,如果現在時間是3月8號1點,那種方式計算出來的就是錯誤的,而Calendar API可以正確處理,雖然很難用。

Calendar c = Calendar.getInstance();
long now = c.getTimeInMillis();

c.add(Calendar.DAY_OF_MONTH, 1);
c.set(Calendar.HOUR_OF_DAY, 0);
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
c.set(Calendar.MILLISECOND, 0);

long millis = c.getTimeInMillis() - now;

 

 

Java8中的寫法

LocalTime midnight = LocalTime.MIDNIGHT;
LocalDate today = LocalDate.now();
LocalDateTime todayMidnight = LocalDateTime.of(today, midnight);
LocalDateTime tomorrowMidnight = todayMidnight.plusDays(1);
System.out.println(TimeUnit.NANOSECONDS.toSeconds(Duration.between(LocalDateTime.now(), tomorrowMidnight).toNanos()));

 

https://www.zhihu.com/question/28475461

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM