我有使用以下Joda DateTime方法的代码。
timestamp.toDateTime(ZoneOffset.UTC)
以下内容将如何转换为Java 8?我环顾了互联网,但一无所获。
您似乎想从使用Joda-Time库迁移到使用其后继程序Java 8及更高版本中内置的java.time类。
java.time中的基本构建基类为Instant
。此类表示UTC中的某个时刻,分辨率为纳秒。在内部,此类是从1970年UTC的第一时刻的纪元开始算起的整个秒数,再加上一个以纳秒为单位存储的小数。]
[当给定有缺陷的旧类java.sql.Timestamp
的对象时,请立即转换为Instant
。调用添加到旧类中的新转换方法。
Instant instant = myJavaSqlTimestamp.toInstant() ;
数据库
要将该值存储在数据库中,请转换为更灵活的OffsetDateTime
类。尽管Instant
和ZonedDateTime
类更常用,但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日中午举行,我们不知道这是在日本东京中午,在法国图卢兹中午还是在美国俄亥俄州托莱多中午–是三个非常不同的时刻,相隔几个小时。
要跟踪时刻,请使用Instant
,OffsetDateTime
或ZonedDateTime
。