如何將最初實例化爲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