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