将long转换为Timestamp时出错

时间:2012-02-11 14:35:01

标签: java datetime date timestamp

我正在使用long构建java.sql.Timestamp。有时它会在错误的时候让它正确! e.g。

76875给出时间戳“1970-01-01 01:01:16.875”

额外的小时来自哪里?问题出现了,然后自行消失:

“1970-01-01 00:01:16.875”。

导致问题的代码在Google appengine上运行,是否会让TimeZones搞砸了?我试图找出一种模式但尚未管理。

2 个答案:

答案 0 :(得分:0)

数据库是否与您的应用在同一台服务器上运行?最有可能出现时区差异。

这里有一些变数。尝试找出问题所在的位置:

  1. 使用长时间戳值构造一个Date对象 - 它是您所期望的吗?
  2. 确定App引擎服务器所在的时区。也许是新的TimeZone()。getDisplayName()
  3. 尝试使用java.sql.Date - 这样做的行为方式相同吗?
  4. 您可能想要为自己创建这些各种日期对象的表。尝试不同的long值,并为每个值创建一行java.util.Date,java.sql.Date,java.sql.Timestamp。

答案 1 :(得分:0)

刷新Timestamp构造函数的内存:自1970年1月1日00:00:00 GMT以来的时间 - 毫秒。注意,它是 GMT

“1970-01-01 01:01:16.875”没问题,我猜你现在在欧洲时区(+1):)

试试new java.sql.Timestamp(76875).toGMTString(),你会得到“1970年1月1日00:01:16 GMT”。

你也可以先致电TimeZone.setDefault(TimeZone.getTimeZone("GMT+0:00"));,然后你的时间戳将是“1970-01-01 00:01:16.875”。