谁能解释一下为什么会这样?为什么那个时间会有24分钟的偏移,如何处理?
Scala 2.12 和 Java 8。
scala> java.sql.Timestamp.valueOf("1900-01-01 00:59:00")
res22: java.sql.Timestamp = 1900-01-01 00:59:00.0
scala> java.sql.Timestamp.valueOf("1900-01-01 01:00:00")
res23: java.sql.Timestamp = 1900-01-01 01:24:00.0
scala> java.sql.Timestamp.valueOf("1900-01-01 01:14:00")
res24: java.sql.Timestamp = 1900-01-01 01:38:00.0
scala> java.sql.Timestamp.valueOf("1900-01-01 01:20:00")
res25: java.sql.Timestamp = 1900-01-01 01:44:00.0
scala> java.sql.Timestamp.valueOf("1900-01-01 01:23:00")
res26: java.sql.Timestamp = 1900-01-01 01:47:00.0
scala> java.sql.Timestamp.valueOf("1900-01-01 01:24:00")
res27: java.sql.Timestamp = 1900-01-01 01:24:00.0
scala> java.sql.Timestamp.valueOf("1900-01-01 01:30:00")
res28: java.sql.Timestamp = 1900-01-01 01:30:00.0
最佳答案
查看IANA时区数据库中的时区定义:
# Zone NAME GMTOFF RULES FORMAT [UNTIL]
Zone Europe/Warsaw 1:24:00 - LMT 1880
1:24:00 - WMT 1915 Aug 5 # Warsaw Mean Time
1:00 C-Eur CE%sT 1918 Sep 16 3:00
2:00 Poland EE%sT 1922 Jun
1:00 Poland CE%sT 1940 Jun 23 2:00
1:00 C-Eur CE%sT 1944 Oct
1:00 Poland CE%sT 1977
1:00 W-Eur CE%sT 1988
1:00 EU CE%sT
1900 年,波兰的时区与 UTC 有 1 小时 24 分钟的时差,即他们使用的是本地平均太阳时。那是在 1915 年 8 月 5 日引入标准时区之前。
一定是您向 PostgreSQL 提供了一个没有时区的时间戳
,它是在您本地的时区(偏移量为 1:24)解释的。
有人(scala?)然后将此时间戳转换回您本地时区的时间戳,但错误地使用了一个小时的偏移量。
我不知道如何解决这个问题,但是要么在整个过程中使用timestamp without time zone
,要么修复认为波兰时间在 1900 年从 UTC 偏移 1 小时的组件。
关于java.sql.Timestamp 错误的时间解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47823081/