我有一个使用Joda time lib的Scala应用程序,该应用程序已连接到Postgres db,并且我想使用Jooq lib。我想将带有时间戳的数据存储在UTC中,但是我不知道如何在Jooq中进行转换。请参阅表创建脚本。
CREATE TABLE some_event (
id SERIAL NOT NULL PRIMARY KEY,
timestamp TIMESTAMP NOT NULL,
);
我尝试了以下类似操作,但是无法正常工作。
import org.joda.time.DateTime
import java.time.Instant
import java.sql.Timestamp
private val zoneId = ZoneId.of("UTC")
val converter: Converter[Timestamp, DateTime] =
Converter.ofNullable(
classOf[Timestamp],
classOf[DateTime],
(t: Timestamp) => {
val i = t.toInstant
val z = ZonedDateTime.ofInstant(i, zoneId)
new DateTime(z.toInstant.toEpochMilli)
},
(t: DateTime) => {
val i = Instant.ofEpochMilli(t.getMillis)
val z = ZonedDateTime.ofInstant(i, zoneId)
Timestamp.from(z.toInstant)
},
)
protected val DATE_TIME_TYPE: DataType[DateTime] = SQLDataType.TIMESTAMP.asConvertedDataType(converter)
private object SomeEvent {
val ID: Field[Int] = field("id", classOf[Int])
val TIMESTAMP: Field[DateTime] = field("timestamp", DATE_TIME_TYPE)
}
我还尝试使用OffsetDateTime实现转换器,但是会抛出异常。我无法更改表并使用TIMESTAMP WITH ZONE。我在先前的实现中使用了Doobie lib,其中使用了java.time.Instant,但是Jooq似乎不支持Instant。你有什么想法吗?谢谢。