【发布时间】:2016-01-27 17:13:25
【问题描述】:
我们的软件架构师决定从我们的项目依赖项中删除 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) 我做对了吗?我不确定 100%。
我刚刚找到了一个带有表格的链接:“Converting from Joda-Time to java.time”
有我发现的信息,我需要使用java.time.ZonedDateTime 或java.time.OffsetDateTime 类,但不是java.time.LocalDateTime,因为LocalDateTime -
相同的概念 - 没有时区的日期和时间
请确认我的重构是正确的(对于 Q1 和 Q2)。
【问题讨论】:
标签: java-8 refactoring jodatime java-time