我使用的是一个客户端库(第三方,而不是我的,不能更改),它使用ThreeTen日期类型。我的项目是Java 11,使用Java 8日期类型。将ThreeTeen对象转换为Java8对应对象的推荐方法是什么?
发布于 2020-01-21 15:30:40
似乎没有内置的方式将一个实例转换为另一个实例。
我认为您已经编写了自己的转换器,如下所示:
部分转换:
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());
}解析另一个实例的格式化输出:
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));
}还没有测试哪个更有效..。
发布于 2020-01-25 09:34:20
似乎在设计中没有预见到这一需要。对于这个看似简单的要求,没有真正的好的和自然的选择。
我喜欢有东西可供选择。deHaar已经提供了两个尽可能好的选项。因此,作为补充,这里还有第三个:通过秒和纳秒转换,从那个时代开始,总偏移数秒,。
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所做的那样。
发布于 2021-10-06 21:34:17
实际上,使用解析进行转换很简单。我正在寻找一个解决方案,然后在这条线上着陆。经过检查,我想这里有一个简单的方法。
java.time.OffsetDateTime odt = java.time.OffsetDateTime.now();
org.threeten.bp.OffsetDateTime ODT = org.threeten.bp.OffsetDateTime.parse(odt.toString());同样地,反之亦然。
org.threeten.bp.OffsetDateTime ODT = org.threeten.bp.OffsetDateTime.now();
java.time.OffsetDateTime odt = java.time.OffsetDateTime.parse(ODT.toString());https://stackoverflow.com/questions/59843725
复制相似问题