Time t = new Time("GMT+8"); // 已棄用
t.setToNow(); // 取得的時間可能不正確
android.text.format.Time 自 API 22 起**標記棄用**,且時區處理有已知 Bug。
public static String getGmt8Time() {
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+08:00"));
// 或 "Asia/Taipei", "Asia/Shanghai", "Asia/Hong_Kong" 等 IANA 時區 ID
return String.format("%04d-%02d-%02d %02d:%02d:%02d",
cal.get(Calendar.YEAR),
cal.get(Calendar.MONTH) + 1,
cal.get(Calendar.DAY_OF_MONTH),
cal.get(Calendar.HOUR_OF_DAY),
cal.get(Calendar.MINUTE),
cal.get(Calendar.SECOND));
}
TimeZone.getTimeZone("GMT+08:00") 明確指定東八區,不受裝置系統時區影響。Asia/Taipei)自動處理夏令時間(東八區無夏令時,但更語意化)。Calendar.getInstance() 會複製預設 Calendar,再設定 TimeZone,不影響全域預設。// 需啟用 coreLibraryDesugaringEnabled true (Gradle)
LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Taipei"));
String formatted = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
現代 API 不可變、執行緒安全、功能更豐富,建議新專案優先採用。