1. 程式人生 > >Java Date Time 教程-java.util.Date

Java Date Time 教程-java.util.Date

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

Javajava.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(該datecompareTo()方法被呼叫)晚於作為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新紀元到現在的總毫秒數),但是如果呼叫了DatetoString(),返回值會提示它是帶著時區的,這會讓開發者感到疑惑。
領域驅動設計的重點在於在清晰度和可理解度中提供了長期的好處,但當你要從之前的API移植到Java SE 8時,可能需要對你應用中的領域模型思考清楚。
3、年代表的分離。為了支援這世界上某些地區的使用者的需要(比如日本、泰國,不需要遵循國際標準ISO-8601),新的API允許人們使用不同的日曆系統。而這是在不需要給大部分只使用標準年代表的開發者強加額外的負擔的情況下做到的。)

(全文完)