Java Date Time 教程-java.util.Date
Java
的java.util.Date
類是Java
最初的時間類之一。今天該類的大部分方法已不推薦使用,取而代之的是java.util.Calendar
類。不過你仍然可以使用java.util.Date
類去表示某個時間。下麵是一個如何實例化java.util.Date
的例子:
java.util.Date date = new java.util.Date();
Date
實例包含了當前時間作為它的日期和時間。
你可以通過getTime()
方法訪問java.util.Date
實例的日期和時間,比如像這樣:
java.util.Date date = new java.util.Date(); long time = date.getTime();
你也可以用一個以毫秒為單位的時間作為來源來創建一個java.util.Date
實例,比如像這樣:
long now = System.currentTimeMillis(); java.util.Date date = new java.util.Date(now);
Dates比較
由於java.util.Date
類實現了java.lang.Comparable
接口,所以你可以對java.util.Date
實例進行比較。下麵將介紹如何使用:
java.util.Date date1 = new java.util.Date(); java.util.Date date2 = new java.util.Date(); int comparison = date1.compareTo(date2);
變量comparison
遵循著Comparable
接口的規則,意味著compareTo()
方法將返回:
- 一個
int
類型的大於0的值,如果某個date
(該date
的compareTo()
方法被調用)晚於作為compareTo()
方法參數的date
。 - 一個
int
類型的等於0的值,如果某個date
(該date的
compareTo()
方法被調用)等於作為compareTo()
方法參數的date
。 - 一個
int
類型的小於0的值,如果某個date
(該date的
compareTo()
方法被調用)早於作為compareTo()
方法參數的date
。
java.util.Date
還擁有兩個比較時間的簡寫方法。分別是before
方法和after
方法。下麵是兩個如何使用這些方法的例子:
java.util.Date date1 = new java.util.Date(); java.util.Date date2 = new java.util.Date(); boolean isBefore = date1.before(date2); boolean isAfter = date1.after (date2);
獲取年、月、日、小時等
獲取年、月、日、小時等的方法已經不推薦使用,顯然內部的計算方法不完全正確。(原文:Apparently the algorithms used internally were not entirely correct.)
如果你需要獲取或者設置年、月、日、小時等,則使用java.util.Calendar
。
(譯者注:
關於java.util.Date
類中的大部分方法已經不推薦使用的原因,摘錄Oracle設計新的Date Time API
的目的如下(地址在這):
新的API是由三個核心理念驅動的:
1、不可變類。在現有的Java
格式化器有一個致命的缺陷,那就是他們不是線程安全的。這給開發者帶來了負擔,開發者得以線程安全的方式使用它們,並且在每天的開發中去思考時間處理代碼的並發問題。新的API通過確保它的核心類是不可變的且表示定義明確的值來避免這個問題。
2、領域驅動設計。新的API模型的領域是非常精確的,這些類為date和time描繪了不同的使用情況。(原文:The new API models its domain very precisely with classes that represent different use cases for Date and Time closely.)這區別於之前的Java
類庫對這方麵糟糕的考慮。舉個例子,java.util.Date
代表時間線上的一個瞬間(包含了從Unix新紀元到現在的總毫秒數),但是如果調用了Date
的toString()
,返回值會提示它是帶著時區的,這會讓開發者感到疑惑。
領域驅動設計的重點在於在清晰度和可理解度中提供了長期的好處,但當你要從之前的API
移植到Java SE 8
時,可能需要對你應用中的領域模型思考清楚。
3、年代表的分離。為了支持這世界上某些地區的使用者的需要(比如日本、泰國,不需要遵循國際標準ISO-8601),新的API
允許人們使用不同的日曆係統。而這是在不需要給大部分隻使用標準年代表的開發者強加額外的負擔的情況下做到的。)
(全文完)
最後更新:2017-05-22 14:34:04