閱讀406 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Java Date Time 教程-java.util.Date

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允許人們使用不同的日曆係統。而這是在不需要給大部分隻使用標準年代表的開發者強加額外的負擔的情況下做到的。)

(全文完)

最後更新:2017-05-22 14:34:04

  上一篇:go  使用 AWS 的 GO SDK 獲取區域與終端節點信息
  下一篇:go  張誌華:機器學習的發展曆程及啟示