基於 java.util.Calendar 實現兩時間點差值計算,自動換算為「天/時/分/秒」人類可讀格式。
import java.text.SimpleDateFormat;
import java.util.Calendar;
public class TimeDiffCalculator {
public static void main(String[] args) {
// 目標時間:2016-01-01 00:00:00
Calendar target = Calendar.getInstance();
target.set(2016, Calendar.JANUARY, 1, 0, 0, 0);
target.set(Calendar.MILLISECOND, 0);
Calendar now = Calendar.getInstance();
long diffMs = now.getTimeInMillis() - target.getTimeInMillis(); // 毫秒差
if (diffMs < 0) {
System.out.println("目標時間在未來");
return;
}
long diffSec = diffMs / 1000;
long diffMin = diffSec / 60;
long diffHour = diffMin / 60;
long diffDay = diffHour / 24;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("當前時間:" + sdf.format(now.getTime()));
System.out.println("目標時間:" + sdf.format(target.getTime()));
System.out.printf("時間差:%d天 %d時 %d分 %d秒%n",
diffDay, diffHour % 24, diffMin % 60, diffSec % 60);
}
}
Calendar.MONTH 從 0 開始(0=1月),設定月份時需 month - 1 或直接用常量 Calendar.JANUARY。getTimeInMillis() 返回 UTC 毫秒時間戳,相減得到精確毫秒差。hour % 24、min % 60、sec % 60。SimpleDateFormat **非線程安全**,多線程環境請用 ThreadLocal 或 JDK 8+ DateTimeFormatter。import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
public class ModernTimeDiff {
public static void main(String[] args) {
LocalDateTime target = LocalDateTime.of(2016, 1, 1, 0, 0);
LocalDateTime now = LocalDateTime.now();
long days = ChronoUnit.DAYS.between(target, now);
long hours = ChronoUnit.HOURS.between(target, now) % 24;
long minutes = ChronoUnit.MINUTES.between(target, now) % 60;
long seconds = ChronoUnit.SECONDS.between(target, now) % 60;
DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println("當前:" + now.format(fmt));
System.out.println("目標:" + target.format(fmt));
System.out.printf("差值:%d天 %d時 %d分 %d秒%n", days, hours, minutes, seconds);
// 更豐富:Duration / Period
Duration d = Duration.between(target, now);
System.out.println("總秒數:" + d.getSeconds());
System.out.println("總天數:" + d.toDays());
}
}
java.time 包不可變、線程安全、API 豐富(Duration、Period、ChronoUnit)。