use*_*011 4 refactoring jodatime java-8 java-time
我们的软件架构师决定从项目依赖项中删除Joda时间库,并使用Java 8时间的功能.我在做我们的项目的研究,我想找到,我们正在使用乔达时间lib中的所有地方,并确定我们使用的究竟是什么(乔达LocalDate,DateTime等等).
我不是Joda时间库的专家,我不是Java 8时间的专家,所以我有一些问题:
在代码中我看到很多这样的地方:
DateTime jodaDateTime = new DateTime();
doSomething(jodaDateTime.toDate());
Run Code Online (Sandbox Code Playgroud)
我有点困惑.
(Q1)DateTime在这种特殊情况下使用joda是否有意义
?我相信,我们可以使用经典java.util.Date,我们不需要Joda:
java.util.Date date = new Date();
doSomething(date);
Run Code Online (Sandbox Code Playgroud)
正确?
另外,我看到了这段代码:
org.joda.time.DateTime jodaDateTime = new DateTime();
org.joda.time.DateTime jodaDateTimeInPast = jodaDateTime.minusSeconds(60);
doSomething(jodaDateTimeInPast.toDate());
Run Code Online (Sandbox Code Playgroud)
我认为,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);
Run Code Online (Sandbox Code Playgroud)
(Q2)我是否以正确的方式完成了它?我不确定100%.我刚刚发现这个链接有一个表:" 从Joda-Time转换为java.time "有我发现的信息,我需要使用java.time.ZonedDateTime或java.time.OffsetDateTime类,但不是java.time.LocalDateTime,因为LocalDateTime-
相同的概念 - 没有时区的日期和时间
请确认我的重构是正确的(Q1和Q2).
关于转换的大多数问题都应由我的博客处理.
Q1a:创建一个Joda-Time对象只是为了改回来是没有意义的java.util.Date.但是,该方法应该采用Instant或者ZonedDateTime:
Instant instant = Instant.now();
doSomething(instant); // method changed to take Instant
Run Code Online (Sandbox Code Playgroud)
请注意,这Instant是最接近的匹配java.util.Date.
Q1b:这个案例涉及一个时区,所以应该使用ZonedDateTime.
ZonedDateTime java8DateTime = ZonedDateTime.now(); // uses ZoneId.systemDefault()
ZonedDateTime java8DateTimeInPast = java8DateTime.minusSeconds(60);
doSomething(java8DateTimeInPast.toInstant());
Run Code Online (Sandbox Code Playgroud)
同样,这假设doSomething改为采取Instant.
java.time正确使用的关键是考虑每个数据的数据类型是否正确.
LocalDateLocalTimeZonedDateTimeInstantOffsetDateTime.| 归档时间: |
|
| 查看次数: |
5254 次 |
| 最近记录: |