1. 程式人生 > >Java Date Time 教程

Java Date Time 教程

原文連結 作者:Jakob Jenkov  譯者:魏嘉鵬

目錄

  • Java 8 Date Time API
  • Java 7 Date Time API

當你初次嘗試弄明白怎麼去使用Java的date time 的API的時候,那是相當令人困惑的。Therefore I have put together this little trail on Java’s date and time classes。希望這會讓你對Java’的date類和time類有個總體的認識。我也希望這能消除一些Sun所製造的關於Java中許多date和time類的困惑。
實際上,在Java8中,隨著一整套新的類的引入,舊有的date time API已經發生了改變(清除)。這個教程將會一起解釋Java8和Java7的date time API.

Java 8 Date Time API

在Java8中,加入了一個全新的date time API。這個API在Java8標準類庫中的java.time包。
Java8中date time API最主要的改變是日期和時間不再表示為從1970年1月1日到現在為止的總毫秒數,而是總秒數和總納秒數。總秒數可以是正的也可以是負的以及它由long型別來表示。總納秒數永遠是正的以及它由int型別來表示。你將會在新的Java date time API 的許多類中看到這種新的日期和時間表現形式。
Java.time 包中也包含了一套子類,這些子類包含了更多的實用工具等。舉個例子,java.time.chrono包中包含了一些處理日本、泰國、臺灣和伊斯蘭日曆的物件類。Java.time.format包中包含了用於轉換strings到dates和格式化 dates 到 strings。

Java8 中date time API核心由以下這些類組成:

Instant 表示時間線上的一個瞬間。在Java7的date time API中,一個瞬間通常由從1970年1月1日到現在的總毫秒數來表示。在Java8中Instant類代表著時間線上的一個瞬間,這個瞬間由從1970年1月1日到現在的總秒數和總納秒數來表示。
Duration 表示持續的時間,比如在兩個瞬間之間的時間。和Instant類一樣,Duration將這個時間表示為總秒數和總納秒數。
LocalDate 表示不帶時區資訊的日期-比如生日日期、官方節日等。
LocalDateTime 表示不帶時區資訊的日期時間。
LocalTime 表示不帶時區資訊的當地時間。
TemporalAdjuster 譯者注:原文這裡為空白)
ZonedDateTime 表示攜帶時區資訊的日期時間
Period 譯者注:原文這裡為空白)
DateTimeFormatter 將date time物件格式化為字串。比如zonedDateTime或者LocalDateTime。

Java 7 Date Time API

Java7有以下日期時間的類和方法。後面我會在每一個類的各自的頁面介紹他們。

System.currentTimeMillis() 將從1970年1月1日到當前時間的總毫秒數返回的靜態方法。
java.util.Date 表示日期和時間的類,其中大部分方法已被棄用。
java.sql.Date 表示日期的類。去除了所有時間資訊。該類由JDBC所使用。
java.sql.Timestamp 表示日期和時間的類。該類由JDBC所使用。
java.util.Calendar 一些Calendar類的基類,擁有著計算日期和時間的方法,比如在另一個日期上新增一天或者一個月。
java.util.GregorianCalendar java.util.Calendar的一個具體子類,表示在當今西方普遍使用的公曆。擁有著來自於 java.util.Calendar所有計算日期和時間的方法。
java.util.TimeZone Java TimeZone類表示時區,在跨時區的日曆計算很有用。
java.text.SimpleDateFormat 該類可以幫助你轉換strings到dates和格式化 dates 到 strings。

那麼,哪些類是你應該使用的呢?這個取決於你將要做什麼。
如果你只是做一些簡單的時間設定,那麼System.currentTimeMillis()就足矣。
如果你只是需要一個能夠裝載日期的物件,比如作為一個簡單的域模型物件的屬性,那麼你可以使用java.util.Date 類。
如果你只是需要讀取和寫入日期時間到資料庫,那麼使用java.sql.Date 類和java.sql.Timestamp類。
如果你只是需要做一些日期計算,比如在另一個日期新增一些天數或者月數、檢查給定的日期是一週中的第幾天(週一、週二等)、在時區之間轉換日期和時間,那麼使用java.util.Calendar類和java.util.GregorianCalendar 類。
這裡有一個Java date 和time 教程的列表,方便你快速導航(譯者注:目前還沒有翻譯完,會盡快補全):

(全文完)