3

在 Scala 程序中,我从客户端收到一个特定的日期,例如:

2013-10-20T23:59:59.999Z

我真的想在保存到数据库时保留这个日期而不是转换为本地,所以这一行:

debug("--sql timestamp: " + new Timestamp(reading.timestamp.getMillis()))

正在打印:(2013-10-21 02:59:59.999我在罗马尼亚)。

有什么办法可以忽略时区吗?

4

2 回答 2

2

2013-10-20T23:59:59.999Z并且2013-10-21 02:59:59.999实际上是同一时间:2013-10-20T23:59:59.999ZUTC 时区 (Z)中,而第二个是相对的,并表示为您的本地时区(UTC+3 然后在罗马尼亚)。

在 PostgreSQL 中,您应该将时间戳作为TIMESTAMP WITH TIME ZONE( TIMESTAMPTZ) 存储在数据库中以处理此问题。您将始终能够稍后在您选择的时区(例如 UTC)将其打印出来。(您可能对这个最近的问题感兴趣,以了解存储类型为何重要。)

如果您想再次打印 UTC/Z 时区的时间戳,new DateTime(millis, DateTimeZone.UTC)应该有帮助(使用 Joda Time)。

于 2013-10-12T13:41:57.657 回答
2

这是Timestamp.toString()行为。java.sql.Timestampextendsjava.util.Date并在其toString()方法中特别使用 ,super.getHours()根据javadoc,它返回以本地时区解释的小时数 - 与您观察到的完全一样。

但是,内部Timestamp仍然保持正确的时间戳值。但是,将其存储到数据库中可能会出现问题。看到这个答案。

于 2013-10-12T13:06:41.277 回答