将JodaTime LocalDateTime转换为Java 8

问题描述 投票:0回答:1

我有使用以下Joda DateTime方法的代码。

timestamp.toDateTime(ZoneOffset.UTC)

以下内容将如何转换为Java 8?我环顾了互联网,但一无所获。

java java-8 jodatime
1个回答
0
投票

java.time

您似乎想从使用Joda-Time库迁移到使用其后继程序Java 8及更高版本中内置的java.time类。

java.time中的基本构建基类为Instant。此类表示UTC中的某个时刻,分辨率为纳秒。在内部,此类是从1970年UTC的第一时刻的纪元开始算起的整个秒数,再加上一个以纳秒为单位存储的小数。]

[当给定有缺陷的旧类java.sql.Timestamp的对象时,请立即转换为Instant。调用添加到旧类中的新转换方法。

Instant instant = myJavaSqlTimestamp.toInstant() ;

数据库

要将该值存储在数据库中,请转换为更灵活的OffsetDateTime类。尽管InstantZonedDateTime类更常用,但JDBC 4.2规范不需要支持这两个类。

您的数据库列的类型必须类似于标准SQL类型TIMESTAMP WITH TIME ZONE(不是WITHOUT)。

OffsetDateTime odt = instant.toOffsetDateTime( ZoneOffset.UTC ) ;

传递给已准备好的语句的setObject方法。

myPreparedStatement.setObject( … , odt ) ;

要从数据库中检索,请调用getObject

OffsetDateTime odt = myPreparedStatement.getObject( … , OffsetDateTime.class ) ;

片刻

您说:

但是我只有LocalDateTime –

LocalDateTime完全是在此处使用的错误类。该类故意缺少时区或从UTC偏移的任何概念。所以这堂课不能代表片刻。

该课程仅包含日期和时间,仅此而已。因此,如果LocalDateTime的对象在2021年1月23日中午举行,我们不知道这是在日本东京中午,在法国图卢兹中午还是在美国俄亥俄州托莱多中午–是三个非常不同的时刻,相隔几个小时。

要跟踪时刻,请使用InstantOffsetDateTimeZonedDateTime

© www.soinside.com 2019 - 2024. All rights reserved.