首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 時間處理系列 (3):Date 類核心 API 與 GMT/UTC/時區關係圖解

     編輯:Java 相關知識

Date 類定位

java.util.Date 表示精確到毫秒的時間瞬間。JDK 1.1 前承擔日期計算、格式化職責,後因國際化不足被 Calendar、DateFormat 取代,大部分方法已棄用。現僅作為時間戳載體與歷史 API 兼容。

五種構造函數

構造函數參數說明示例
Date(int year, int month, int day)year-1900, month 0-11, day 1-31new Date(88,7,8) → 1988-08-08
Date(int y, int m, int d, int h, int min)+ hour 0-23, min 0-59new Date(99,8,9,19,19) → 1999-09-09 19:19
Date(int y, int m, int d, int h, int min, int s)+ sec 0-59new Date(100,10,10,20,10,10) → 2000-11-10 20:10:10
Date(long millis)毫秒數 = 目標時間 - 1970-01-01 00:00:00 GMTnew Date(973858210000L)
Date(String s)解析 RFC 格式字符串new Date("Sat, 12 Aug 95 13:30:00 GMT")

關鍵坑點:year = 實際年份 - 1900;month 0=一月;weekday 1=周日。

Date ↔ Calendar 互轉


// Date → Calendar
Calendar cal = Calendar.getInstance();
cal.setTime(date);

// Calendar → Date
Date date = cal.getTime();

核心 API 分類

獲取器 (均已棄用,建議用 Calendar)

  • getYear()、getMonth()、getDate()、getHours()、getMinutes()、getSeconds()、getDay() (星期)
  • getTime() 獲取毫秒時間戳 唯一推薦保留
  • getTimezoneOffset() 本地時區與 UTC 差 (分鐘)

設置器 (均已棄用)

  • setYear()、setMonth()、setDate()、setHours()、setMinutes()、setSeconds()
  • setTime(long millis) 設置時間戳 唯一推薦保留

工具方法

  • UTC(int y, m, d, h, min, s) 靜態方法返回 GMT 時間戳
  • parse(String) 靜態解析返回時間戳
  • after/before/compareTo/equals 比較
  • clone()、toString()、toGMTString()、toLocaleString()

實戰演示

Date date = new Date(113, 8, 19, 14, 22, 30); // 2013-09-19 14:22:30
// 讀取
System.out.println("Year: " + (date.getYear() + 1900));
System.out.println("Month: " + (date.getMonth() + 1));
System.out.println("Day: " + date.getDate());
System.out.println("Hour: " + date.getHours());
System.out.println("Millis: " + date.getTime());

// 修改
date.setYear(123); // 2023
date.setMonth(0);  // 一月
date.setDate(1);
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);

GMT、UTC、時區深度關係

世界時區劃分

世界時區圖

時區動圖

  • 本初子午線 (格林威治) 為 0° 經線
  • 每 15° 經度劃分一時區,共 24 個標準時區 + 2 個半時區 (180° 國際換日線)
  • 東區時間早 (GMT+),西區時間晚 (GMT-)
  • 台灣/中國大陸位於東八區 (GMT+8 / UTC+8)

GMT (Greenwich Mean Time)

  • 格林威治皇家天文台天文觀測得出的平均太陽時
  • 1884 年國際會議確立為世界標準時間基準
  • 機械表雙時區功能標識為 GMT

UTC (Coordinated Universal Time)

  • 國際原子時 (TAI) + 閏秒修正,精度遠超天文時
  • 誤差 ≤ 0.9 秒,超出由國際地球自轉服務局 (IERS) 發布閏秒調整
  • 現代計算機、網絡、衛星導航統一基準
  • 功能上等同 GMT,但定義更科學嚴謹

夏令時 (DST)

  • 1784 年富蘭克林倡議,1915 年德國首創
  • 夏季調快 1 小時延長日照利用,約 70 國執行
  • 規則由各國立法決定,變更頻繁 (如歐美近年討論取消)
  • Java TimeZone 內嵌 IANA 數據庫自動處理

總結

Date 是時間戳容器,核心只用 getTime()/setTime()。日期計算、格式化、國際化請遷移至 Calendar/DateFormat/java.time。理解 GMT/UTC/時區/DST 關係是處理全球化時間業務的基石。

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