如何使用ThreeTenABP将ZonedDateTime/OffsetDateTime转换为Date?

How to convert ZonedDateTime/OffsetDateTime to Date using ThreeTenABP?

提问人:Jonik 提问时间:1/5/2017 最后编辑:Jonik 更新时间:5/26/2022 访问量:63770

问:

使用 ThreeTen Android 向后移植库,将 或 转换为老式实例的最简单方法是什么?ZonedDateTimeOffsetDateTimejava.util.Date

如果我有完整的 Java 8 库供我使用,这当然是这样做的方法(就像这个问题一样):

Date.from(zonedDateTime.toInstant());

但我不能在 Android 上使用它;特别是缺少 Date.from(Instant instant)。

Java 的 Android ThreeTenBP ThreeTenABP

评论


答:

43赞 Jonik 1/5/2017 #1

好吧,一种直接的方法是获取自 epoch 以来的毫秒数,并从中创建日期:

long epochMilli = zonedDateTime.toInstant().toEpochMilli();
Date date = new Date(epochMilli);

请随时指出是否有更可取的方法。

评论

1赞 kiedysktos 10/9/2017
甚至是单行new Date(zonedDateTime.toInstant().toEpochMilli());
0赞 trebor 6/27/2022
@Sten stackoverflow.com/a/72392825/1880761 的答案甚至更简单。
19赞 JodaStephen 1/6/2017 #2

查看哪些处理添加到类中的方法,例如: http://www.threeten.org/threetenbp/apidocs/org/threeten/bp/DateTimeUtils.htmlDateTimeUtilsjava.util.Date

编辑:使用它,完整的代码将是:

DateTimeUtils.toDate(zonedDateTime.toInstant())

评论

4赞 Jonik 1/9/2017
很好,这个实用程序类是我错过的。所以确切的代码是 .同样值得一提的是(查看 ThreeTenABP 来源),在引擎盖下,它只使用了我的想法,即 .DateTimeUtils.toDate(zonedDateTime.toInstant())new Date(instant.toEpochMilli())