如何将最初实例化为CST的java.sql.Timestamp对象的时区更改为GMT?java.sql.Timestamp:更改Timestamp的时区
4
A
回答
11
java.sql.Timestamp
物体没有有时区 - 它们是时间的瞬间,如java.util.Date
。
如果您认为他们在特定的时区,您可能会因误导性输出而感到困惑(例如,使用默认时区自动将该时刻转换为本地时间)或者您可能有以不恰当的方式创建数据。你需要的答案将取决于你的情况的细节。
例如,如果你只是想显示在特定时区中的Timestamp
值,则可以使用SimpleDateFormat
,适当地设置时区,只是格式化Timestamp
(因为它延伸Date
)。我不相信这会让你显示与内部时间戳存储一样精确的数据,但可能不会对你造成问题。
如果您的数据已被错误地创建为那么可能有也可能没有办法“更正”它 - 例如,由于夏令时更改可能存在一些不明确之处。然而,我们越了解它越好,我们就能帮助你。
1
某些Timestamp构造函数的确依赖于默认的时区。为了避免这种 一种方法是使用需要很长的构造:
TimeZone.setDefault(TimeZone.getTimeZone("GMT"))
Timestamp.valueOf("2016-10-26 23:00:00").getTime()
res16: Long = 1477522800000 // This is what we want
TimeZone.setDefault(TimeZone.getTimeZone("GMT-1"))
Timestamp.valueOf("2016-10-26 23:00:00").getTime()
res14: Long = 1477526400000
new Timestamp(OffsetDateTime.of(2016,10,26,23,0,0,0,ZoneOffset.UTC).toInstant.toEpochMilli).getTime
res15: Long = 1477522800000 // We get the same result at in GMT
相关问题
- 1. 在Oracle中更改TIMESTAMP WITH TIMEZONE的时区组件
- 2. 在另一个时区将java.sql.Timestamp转换为java.sql.Timestamp
- 3. 如何知道timeStamp何时更改?
- 4. java.sql.Timestamp(long)使用哪个时区?
- 5. Joda DateTime到java.sql.Timestamp忽略时区?
- 6. 更新java.sql.Timestamp
- 7. 更改时区
- 8. 更改时区
- 9. 更改时区
- 10. 更改列类型为timestamp
- 11. OpenJDK java.sql.Timestamp与Sun Java VM的timestamp类不同吗?
- 12. 将TIMESTAMP转换为INTEGER的Mysql - 时区
- 13. 更改时区 - MonetDB
- 14. MySQL时区更改?
- 15. 更改CurrentDate时区
- 16. simpledateformat更改时区
- 17. Javascript时区更改
- 18. 更改时区phpmyadmin?
- 19. 转换TIMESTAMP和时区到不同的时区
- 20. 更改NSDate的时区
- 21. 更改Firebase的时区(UTC)
- 22. 的Python:更改Windows时区
- 23. 更改datetimepicker的时区
- 24. 更改mysql的时区
- 25. NSManagedObject的timeStamp更新
- 26. RoR 4更改时区
- 27. 更改时区在JavaScript
- 28. 更改会员级时区
- 29. 在PHP中更改时区
- 30. na.approx更改时区显示
谢谢,乔恩的答案,但有使用getTimezoneOffset(),在时间戳的方法已过时,它返回从格林尼治标准时间以分钟为单位的偏移量,在我的情况下,它返回到360分钟。期望的结果是将其更改为0,这将是GMT时间戳的情况。 – abson 2011-12-21 11:36:49
@abson:'getTimezoneOffset'继承自'Date' - 它总是*相对于系统默认时区。它根本不属于对象的一部分,不应该使用。 – 2011-12-21 11:42:40
时区偏移量肯定会影响结果。我在数据库中有两个时间戳。一个在DST之前,一个在DST之后。如果我使用Timestamp的getTime()作为其构造函数参数创建Calendar对象,那么对于之前的DST时间戳而不是DST之后的时间戳可以。尽管使用Calendar.getInstance(TimeZone.getTimeZone(“UTC”))来实例化Calendar对象,但它错误地将其“纠正”了一个小时 – 2013-04-04 10:43:15