我们的软件架构师决定从我们项目的依赖项中删除Joda时间库,并使用Java 8时间的功能。我正在研究我们的项目,试图找到我们使用Joda时间库的所有位置,并确定我们实际上正在使用什么(如joda LocalDate
、DateTime
等)。
我不是Joda时间库的专家,也不是Java 8时间的专家,所以我有一些问题:
在代码中,我看到了很多像这样的地方:
DateTime jodaDateTime = new DateTime();
doSomething(jodaDateTime.toDate());
我有点困惑。
(Q1) 在这种情况下使用joda DateTime
有意义吗? 我认为我们可以只使用经典的java.util.Date
而不需要Joda:
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) 我是否以正确的方式完成了它?我不确定百分之百。
我只是在这个链接中找到了一个表格: "Converting from Joda-Time to java.time"
在那里我找到了信息,我需要使用java.time.ZonedDateTime
或java.time.OffsetDateTime
类,而不是java.time.LocalDateTime
,因为LocalDateTime
-
相同的概念-没有时区的日期和时间
请确认我的重构是正确的(对于Q1和Q2)。
java.util.Date
的toString()
方法返回本地时区的时间,但对象的状态不包含该信息。理解这个差异是理解java.util.Date
的关键。 - JodaStephen