在 Scala 程序中,我从客户端收到一个特定的日期,例如:
2013-10-20T23:59:59.999Z
我真的想在保存到数据库时保留这个日期而不是转换为本地,所以这一行:
debug("--sql timestamp: " + new Timestamp(reading.timestamp.getMillis()))
正在打印:(2013-10-21 02:59:59.999
我在罗马尼亚)。
有什么办法可以忽略时区吗?
在 Scala 程序中,我从客户端收到一个特定的日期,例如:
2013-10-20T23:59:59.999Z
我真的想在保存到数据库时保留这个日期而不是转换为本地,所以这一行:
debug("--sql timestamp: " + new Timestamp(reading.timestamp.getMillis()))
正在打印:(2013-10-21 02:59:59.999
我在罗马尼亚)。
有什么办法可以忽略时区吗?
2013-10-20T23:59:59.999Z
并且2013-10-21 02:59:59.999
实际上是同一时间:2013-10-20T23:59:59.999Z
在UTC 时区 (Z)中,而第二个是相对的,并表示为您的本地时区(UTC+3 然后在罗马尼亚)。
在 PostgreSQL 中,您应该将时间戳作为TIMESTAMP WITH TIME ZONE
( TIMESTAMPTZ
) 存储在数据库中以处理此问题。您将始终能够稍后在您选择的时区(例如 UTC)将其打印出来。(您可能对这个最近的问题感兴趣,以了解存储类型为何重要。)
如果您想再次打印 UTC/Z 时区的时间戳,new DateTime(millis, DateTimeZone.UTC)
应该有帮助(使用 Joda Time)。
这是Timestamp.toString()
行为。java.sql.Timestamp
extendsjava.util.Date
并在其toString()
方法中特别使用 ,super.getHours()
根据javadoc,它返回以本地时区解释的小时数 - 与您观察到的完全一样。
但是,内部Timestamp
仍然保持正确的时间戳值。但是,将其存储到数据库中可能会出现问题。看到这个答案。