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