Java 8 Date Time APIjava
Java 7 Date Time APIsql
當你初次嘗試弄明白怎麼去使用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.數據庫
在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。ide
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。 |
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類。
若是你只是須要作一些日期計算,好比在另外一個日期添加一些天數或者月數、檢查給定的日期是一週中的第幾天(周1、週二等)、在時區之間轉換日期和時間,那麼使用java.util.Calendar類和java.util.GregorianCalendar 類。
this