将 org.threeten.bp.* 和 org.joda.time* 转换为相应 java.time.* 类的最佳方法

Best way to convert org.threeten.bp.* and org.joda.time* to corresponding java.time.* class

提问人:klor 提问时间:9/22/2015 最后编辑:klor 更新时间:9/22/2015 访问量:1860

问:

我正在处理一个使用共享库的项目,该库使用 org.threeten 作为日期/时间。由于该库在许多项目之间共享,因此还不能升级到 Java 8(叹气)。 最短的方法似乎是 toString()/parse() 组合

java.time.OffsetDateTime.parse(org.threeten.bp.OffsetDateTime.toString())
java.time.LocalDate.parse(org.threeten.bp.LocalDate.toString())

但是,在创建垃圾方面,更有效的方法可能是使用 .of(...) 方法:

java.time.OffsetDateTime.of(tt.getYear(), tt.getMonth(), tt.getDayOfMonth(), ...)

你有没有偶然发现一个库,它提供了Joda、Threeten和java.time类之间的所有这些转换?

java-8 jodatime java-time threetenbp

评论

0赞 Boris the Spider 9/22/2015
我会得到自纪元以来的千分盘和偏移量 id,那么你只有两个字段要传递,而不是所有字段。
0赞 klor 9/22/2015
@BoristheSpider你也可以这样做。但与 toString()/parse() 方法一样,它将产生从纪元以来的瞬间计算每个字段的开销。Java 8 时间类在内部单独存储所有字段(第 4 点 blog.joda.org/2009/11/why-jsr-310-isn-joda-time_4941.html)。

答:

2赞 JodaStephen 9/22/2015 #1

最简洁的方法是分叉 ThreeTen-Backport 并使术语接口扩展其 Java 8 对应接口。这样,你就可以做到了,依此类推。OffsetDateTime.from(threeTenOffsetDateTime)

我不知道有任何现有的分叉可以做到这一点。