java.sql.Timestamp: changing timezone of Timestamp
如何将最初实例化为CST的java.sql.Timestamp对象的时区更改为GMT?
如果您认为它们处于特定时区,您可能会因为误导输出而感到困惑(例如,使用默认时区自动将该瞬间转换为本地时间)或者您可能已创建数据不恰当的方式。您需要的答案取决于您的具体情况。
例如,如果您只想在特定时区中显示
如果您的数据创建不正确,那么可能会或可能没有办法"纠正"它 - 例如,由于夏令时变化,可能会有一些歧义。但是,我们对它的了解越多,我们就能越好地帮助您。
某些时间戳构造函数确实依赖于默认时区。
避免这种情况的一种方法是使用需要很长时间的构造函数:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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 |