首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 正確獲取指定時區(GMT+8)時間:棄用 Time 類改用 Calendar 與 TimeZone

     編輯:程式設計綜合問答

問題代碼

Time t = new Time("GMT+8"); // 已棄用
t.setToNow(); // 取得的時間可能不正確

android.text.format.Time 自 API 22 起**標記棄用**,且時區處理有已知 Bug。

正確做法:Calendar + TimeZone

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") 明確指定東八區,不受裝置系統時區影響。
  • IANA 時區 ID(如 Asia/Taipei)自動處理夏令時間(東八區無夏令時,但更語意化)。
  • Calendar.getInstance() 會複製預設 Calendar,再設定 TimeZone,不影響全域預設。

進階:Java 8+ (API 26+) 使用 java.time

// 需啟用 coreLibraryDesugaringEnabled true (Gradle)
LocalDateTime now = LocalDateTime.now(ZoneId.of("Asia/Taipei"));
String formatted = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

現代 API 不可變、執行緒安全、功能更豐富,建議新專案優先採用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved