2015-09-21 3 views
3

Я работаю над проектом, который использует общую библиотеку, которая использует org.threeten для Date/Time. Поскольку библиотека разделена по многим проектам, она не может быть обновлена ​​до Java 8 (вздох). Самый короткий путь, кажется, ToString()/синтаксического анализа (сочетание)Лучший способ конвертировать org.threeten.bp. * И org.joda.time * в соответствующий java.time. * Class

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?

+0

Я получаю миллионы с эпохи и id смещения, тогда у вас есть только два поля, а не все. –

+0

@BoristheSpider вы можете это сделать. Но, как и в методах toString()/parse(), у него будут накладные расходы при вычислении каждого поля с момента, следующего за эпохой. Java 8 классов времени внутренне хранят все поля отдельно (пункт 4 http://blog.joda.org/2009/11/why-jsr-310-isn-joda-time_4941.html). – klor

ответ

2

Самый простой способ заключается в fork ThreeTen-Backport и создании терминальных интерфейсов, расширяющих их Java-8. Таким образом, вы можете сделать OffsetDateTime.from(threeTenOffsetDateTime) и так далее.

Я не знаю ни одной существующей вилки, которая делает это.