如何从org.joda.time.DateTime转换为java.time.ZonedDateTime

安德烈亚斯·伦格伦(Andreas Lundgren):

我有一个存储joda时间DateTime对象的数据源。我需要将它们转换为java ZonedDateTime对象,并保留原始时区。

保持偏移量是不够的,因为某些DateTime对象表示每日重复任务,并且这些任务必须在每个日期的特定时区中的特定时间发生。因此,它们必须遵循指定的TimeZone过渡,例如夏季和冬季。我不能说出DateTime对象的最终用途,因此为了安全起见,我需要保留所有对象上的时区信息。

如何从org.joda.time.DateTime转换为java.time.ZonedDateTime?

所有

ord.joda.time.DateTimeZone.getId()

映射到ID可用

java.time.ZoneId

乔达·斯蒂芬(JodaStephen):

并非来自Joda-Time的所有时区字符串都将匹配,java.time但是绝大多数都将匹配,因为它们都基于IANA tz数据。比较DateTimeZone.getAvailableIDs()ZoneId.getAvailableZoneIds()确定不匹配。可以使用映射其他标识符ZoneId.of(String, Map)

为了以最有效的方式进行主要转换,您必须传递每个字段:

ZonedDateTime zdt = ZonedDateTime.ofLocal(
    LocalDateTime.of(
        dt.getYear(),
        dt.getMonthOfYear(),
        dt.getDayOfMonth(),
        dt.getHourOfDay(),
        dt.getMinuteOfHour(),
        dt.getSecondOfMinute(),
        dt.getMillisOfSecond() * 1_000_000),
    ZoneId.of(dt.getZone().getID(), ZoneId.SHORT_IDS),
    ZoneOffset.ofTotalSeconds(dt.getZone().getOffset(dt) / 1000));

使用注意事项ZoneId.SHORT_IDS作为Map在这种情况下。

对于处理大多数用例但性能较低的较简单解决方案,请使用以下方法:

ZonedDateTime zdt = dt.toGregorianCalendar().toZonedDateTime();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将org.joda.time转换为java.time

如何从ZonedDateTime转换为Joda DateTime

如何将java.time.ZonedDateTime转换为XMLGregorianCalendar?

如何将Joda-Time DateTime转换为java.util.Date,反之亦然?

将org.joda.time.Period转换为java.time.Period

java.lang.NoClassDefFoundError:org.joda.time.DateTime

如何将Joda Time DateTime对象转换为SQL Server格式的字符串?

如何将 bytea 转换为 joda.time.DateTime 或时间戳?

我如何同时使用org.joda.time.LocalDate和java.time.LocalDate;

如何使用Joda-Time在Java中设置Time属性

Java Time API将ISO 8601转换为ZonedDateTime

将joda LocalTime转换为sql time

如何使用 Scala 在 Spark Streaming 中序列化 org.joda.time.DateTime?

如何安装Joda-time

将java.sql.Date和java.util.Date转换为org.joda.time.LocalDate

如何使用org.joda.time设置时区?

Joda-Time到Java 8的转换

尝试使用 gradle-swagger-generator-plugin 生成代码时获取 java.lang.NoSuchMethodError: org.joda.time.DateTime.now()Lorg/joda/time/DateTime

Jenkins 2.190.2传递管道视图java.lang.NoClassDefFoundError:org / joda / time / DateTime

java.lang.RuntimeException:不支持的文字类型类org.joda.time.DateTime

将带时区的Joda-Time`DateTime`转换为不带时区的DateTime吗?

从java.time中的`ZonedDateTime`获取`Instant`

如何将Joda-Time的DateTimeFormat.forStyle()转换为JSR 310 JavaTime?

Java8将java.util.Date转换为java.time.ZonedDateTime

Joda-Time DateTime更改时区?

与Joda Time DateTime#centuryOfEra()的混淆

从joda.Datetime转换为time.LocalDateTime是正确的方法吗?

Joda-Time:将JodaTime与时区转换

Java 8 ZonedDateTime或OffsetDateTime替换Joda DateTime