簡體   English   中英

java SimpleDateFormat - Postgres“timestamp with timezone”日期格式的正確格式

[英]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");

您的格式具有ISO Timezone ,因此請使用X (而不是z)。

final String TIME_FORMAT = "yyyy-MM-dd HH:mm:ss.SSSX";

更多信息在這里

的java.sql.Timestamp

當前的JDBC驅動程序將創建。 從Postgres的時間戳類型, TIMESTAMP WITH TIME ZONETIMESTAMP WITHOUT TIME ZONE檢索值時的java.sql.Timestamp對象。

java.sql.Timestamp ts = myResultSet.getTimestamp( 1 ) ;

不需要字符串。 盡可能堅持使用對象而不是字符串作為日期時間值。

java.time

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM