首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将org.threeten.bp.OffsetDateTime转换为java.time.OffsetDateTime?

如何将org.threeten.bp.OffsetDateTime转换为java.time.OffsetDateTime?
EN

Stack Overflow用户
提问于 2020-01-21 14:54:35
回答 3查看 5.2K关注 0票数 6

我使用的是一个客户端库(第三方,而不是我的,不能更改),它使用ThreeTen日期类型。我的项目是Java 11,使用Java 8日期类型。将ThreeTeen对象转换为Java8对应对象的推荐方法是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-01-21 15:30:40

似乎没有内置的方式将一个实例转换为另一个实例。

我认为您已经编写了自己的转换器,如下所示:

部分转换:

代码语言:javascript
复制
public static java.time.OffsetDateTime convertFrom(org.threeten.bp.OffsetDateTime ttOdt) {
    // convert the instance part by part...
    return java.time.OffsetDateTime.of(ttOdt.getYear(), ttOdt.getMonthValue(),
            ttOdt.getDayOfMonth(), ttOdt.getHour(), ttOdt.getMinute(),
            ttOdt.getSecond(), ttOdt.getNano(),
            // ZoneOffset isn't compatible, create one using the seconds of the given
            java.time.ZoneOffset.ofTotalSeconds(ttOdt.getOffset().getTotalSeconds());
}

解析另一个实例的格式化输出:

代码语言:javascript
复制
public static java.time.OffsetDateTime convertFrom(org.threeten.bp.OffsetDateTime ttOdt) {
    // convert the instance by parsing the formatted output of the given instance
    return java.time.OffsetDateTime.parse(
            ttOdt.format(org.threeten.bp.format.DateTimeFormatter.ISO_OFFSET_DATE_TIME));
}

还没有测试哪个更有效..。

票数 6
EN

Stack Overflow用户

发布于 2020-01-25 09:34:20

似乎在设计中没有预见到这一需要。对于这个看似简单的要求,没有真正的好的和自然的选择。

我喜欢有东西可供选择。deHaar已经提供了两个尽可能好的选项。因此,作为补充,这里还有第三个:通过秒和纳秒转换,从那个时代开始,总偏移数秒,

代码语言:javascript
复制
    org.threeten.bp.OffsetDateTime fromThirdParty
            = org.threeten.bp.OffsetDateTime.of(2020, 1, 25, 23, 34, 56, 123456789,
                    org.threeten.bp.ZoneOffset.ofHours(1));

    java.time.Instant jtInstant = java.time.Instant
            .ofEpochSecond(fromThirdParty.toEpochSecond(), fromThirdParty.getNano());
    java.time.ZoneOffset jtOffset = java.time.ZoneOffset.ofTotalSeconds(
            fromThirdParty.getOffset().getTotalSeconds());
    java.time.OffsetDateTime converted
            = java.time.OffsetDateTime.ofInstant(jtInstant, jtOffset);

    System.out.println("From " + fromThirdParty);
    System.out.println("To   " + converted);

这个片段的输出是:

2020-01-25T23:34:56.123456789+01:00到2020-01-25T23:34:56.123456789+01:00

可能的优点包括:我们正在传输3个数值字段(deHaar的第一次转换中的vs 7),从而降低了错误传递值的风险。我们仍然避免将格式格式化为字符串并将其解析回解析(这对我来说是一种浪费,但它又短又好)。

请将它包装成一个名称很好的方法,就像deHaar所做的那样。

票数 4
EN

Stack Overflow用户

发布于 2021-10-06 21:34:17

实际上,使用解析进行转换很简单。我正在寻找一个解决方案,然后在这条线上着陆。经过检查,我想这里有一个简单的方法。

代码语言:javascript
复制
java.time.OffsetDateTime odt = java.time.OffsetDateTime.now();
org.threeten.bp.OffsetDateTime ODT = org.threeten.bp.OffsetDateTime.parse(odt.toString());

同样地,反之亦然。

代码语言:javascript
复制
org.threeten.bp.OffsetDateTime ODT = org.threeten.bp.OffsetDateTime.now();
java.time.OffsetDateTime odt = java.time.OffsetDateTime.parse(ODT.toString());
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59843725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档