我們的軟件架構師決定從我們的項目依賴項中刪除Joda時間庫並使用Java 8時間的特性。我正在研究我們的項目,並試圖找到我們使用Joda時間庫的所有地方,並確定實際使用的內容(joda LocalDate
,DateTime
等)。
我不是喬達時庫的專家,我不是Java的8個時間方面的專家,所以我有一些問題:
在代碼中,我看到了這樣的很多地方:從Joda時間庫遷移到Java時間(Java 8)
DateTime jodaDateTime = new DateTime();
doSomething(jodaDateTime.toDate());
我是有點困惑。
(Q1)這有什麼意義,在這種特殊情況下使用喬達 DateTime
?我相信,我們可以只使用經典java.util.Date
,我們不需要喬達:
java.util.Date date = new Date();
doSomething(date);
正確?
而且,我看到這一段代碼:
org.joda.time.DateTime jodaDateTime = new DateTime();
org.joda.time.DateTime jodaDateTimeInPast = jodaDateTime.minusSeconds(60);
doSomething(jodaDateTimeInPast.toDate());
我認爲,Java的8時API提供了一個計算,在過去的任何日期的大力支持,所以我知道如何更換一塊以上代碼到Java 8:
LocalDatetime java8DateTime = LocalDateTime.now();
LocaldateTime java8DateTimeInPast = java8DateTime.minusSeconds(60);
Date java8Date = Date.from(java8DateTimeInPast.atZone(ZoneId.systemDefault()).toInstant());
doSomething(java8Date);
(Q2),我是用正確的方式做呢?我不確定100%。 我只是發現有一張桌子此鏈接:「Converting from Joda-Time to java.time」 還有我發現的信息,我需要使用java.time.ZonedDateTime
或java.time.OffsetDateTime
類,但不java.time.LocalDateTime
,因爲LocalDateTime
-
同樣的概念 - 日期和時間不時區
請確認我的重構是正確的(對於Q1和Q2)。
您寫道:「即時與java.util.Date最接近匹配」,但是例如:new Date()。toString()返回:Thu Jan 28 18:26:27 EET 2016,但Instant.now()。 toString()返回:2016-01-28T16:26:27.210Z。正如你所見,即時返回16:26:27這是UTC,日期返回18:26:27 - EET – user471011
'java.util.Date'上的'toString()'返回本地時區的時間。但是對象的狀態並不適用於此。瞭解這種差異是理解java.util.Date的關鍵。 – JodaStephen