gpt4 book ai didi

java-8 - 从 Joda 时间库迁移到 Java 时间(Java 8)

转载 作者:行者123 更新时间:2023-12-04 22:58:16 28 4
gpt4 key购买 nike

我们的软件架构师决定从我们的项目依赖项中删除 Joda 时间库并使用 Java 8 时间的功能。我正在研究我们的项目,我试图找到我们使用 Joda 时间库的所有地方,并确定我们实际使用的是什么(joda LocalDateDateTime 等)。
我不是 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 time 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.ZonedDateTimejava.time.OffsetDateTime类,但不是 java.time.LocalDateTime , 因为 LocalDateTime ——

Same concept - date and time without time-zone



请确认我的重构是正确的(对于 Q1 Q2 )。

最佳答案

大多数关于转换的问题应该由我的 blog 处理关于这个话题。

问题1a:
创建 Joda-Time 对象只是为了改回 java.util.Date 是没有意义的。 .但是,该方法应该可能需要InstantZonedDateTime :

Instant instant = Instant.now();
doSomething(instant); // method changed to take Instant

请注意 Instant是最接近 java.util.Date 的匹配项.

问题 1b:
这种情况涉及时区,所以应该使用 ZonedDateTime .
ZonedDateTime java8DateTime = ZonedDateTime.now();  // uses ZoneId.systemDefault()
ZonedDateTime java8DateTimeInPast = java8DateTime.minusSeconds(60);
doSomething(java8DateTimeInPast.toInstant());

同样,这假设 doSomething改为带 Instant .

使用秘诀 java.time正确的是考虑每个数据的正确数据类型。
  • 只是约会?然后使用 LocalDate
  • 只是一个时间?然后使用 LocalTime
  • 日期、时间和时区?然后使用 ZonedDateTime
  • 只是一个没有其他信息的时间戳?然后使用 Instant
  • 具有偏移量(不是区域)的网络日期时间格式?然后使用 OffsetDateTime .
  • 关于java-8 - 从 Joda 时间库迁移到 Java 时间(Java 8),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35043788/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com