[英]What is the correct pattern for parsing the timezone format with SimpleDateFormat
[英]java SimpleDateFormat - Correct format for Postgres “timestamp with timezone” date format
我正在查詢Postgres數據庫,並尋找存儲Postgres“timestamp with timezone”信息的最佳方法。
格式為“yyyy-MM-dd”'HH:mm:ss.SSSzz“(即”2014-04-22 05:39:49.916 + 03“)
我想使用面向時間戳的類型/類來保存信息(不是字符串)
以下拋出我想到的所有TIME_FORMATS
Unparsable日期:
final String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss.SSSz";
final SimpleDateFormat sdf = new SimpleDateFormat(TIME_FORMAT);
final java.util.Date utilDate = sdf.parse("2014-04-22 05:39:49.916+03");
當前的JDBC驅動程序將創建。 從Postgres的時間戳類型, TIMESTAMP WITH TIME ZONE
和TIMESTAMP WITHOUT TIME ZONE
檢索值時的java.sql.Timestamp
對象。
java.sql.Timestamp ts = myResultSet.getTimestamp( 1 ) ;
不需要字符串。 盡可能堅持使用對象而不是字符串作為日期時間值。
在Java 8及更高版本中,您應該使用新的java.time包。 避免使用舊的java.util.Date/.Calendar等。
為JDBC 4.2更新JDBC驅動程序后,您將能夠直接將Postgres日期時間值檢索到java.time類型中。
雖然這樣司機在等着,用加入的java.sql.Timestamp換去新的轉換方法,以和從一個Instant
。
搜索StackOverflow以獲取更多信息,因為已經多次討論過這個問題。
如果您使用的是Java 8,則可以將數據存儲在ZonedDateTime
對象中 ,該對象存儲一個
ISO-8601日歷系統中帶有時區的日期時間,例如2007-12-03T10:15:30 + 01:00歐洲/巴黎。
在結果中的java.sql.Timestamp
值上簡單地調用toInstant()
並且你很高興(感謝@Basil Bourque指出這一點)。
在Java 8之前,您可以使用現有的解決方案。 但請注意,如果您的時區信息存儲為+ +03
,則應將時間格式模式結束為X
,即ISO 8601時區。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.