10

我想插入到我的DB的時區字段的時間戳字符串,其中包括使用準備好的語句的日期,時間和時區。如何在timegamp中添加timezone以及準備好的語句在postgresql中?

問題是Timestamp.valueof函數沒有考慮到字符串包含的時區,所以它會導致錯誤。 接受的格式是yyyy- [m] m- [d] d hh:mm:ss [.f ...],它沒有提及時區。

即引起該錯誤的確切代碼:

pst.setTimestamp(2,Timestamp.valueOf( 「2012-08-24 14:00:00 02:00」))

有什麼辦法可以克服它? 在此先感謝!

回答

1

我相信你可以在你的數據庫中使用多一個字段,其中包括時區。並且在得到這兩個字段後手動計算時間

+0

確定這是一個可以接受的方法,但我想知道是否有由afored上述方式做這件事的任何方式。 –

3

基本問題是java.sql.Timestamp不包含時區信息。我認爲它總是被假定爲「當地時區」。

在解決方案,我能想到的是不使用在PreparedStatement的參數,但在SQL一個時區的文字:

update foo 
    set ts_col = timestamp with time zone '2012-08-24 14:00:00 +02:00'`; 

另一種可能的解決方案是一個正確格式化字符串傳遞到使用PrepareStatement TO_TIMESTAMP():

String sql = "update foo set ts_col = to_timestamp(?, 'yyyy-mm-dd hh24:mi:ss')"; 
PreparedStatement pstmt = connection.prepareStatement(sql); 
pstmt.setString(1, "2012-08-24 14:00:00 +02:00"); 
+0

我們不應該在to_timestamp()的日期格式中包含時區嗎? –

+0

@MichelangeloVandilakis:它被包含在第二個例子中(它恰好在'?'佔位符之後)。第一個例子是* not *對'to_timstamp()'的調用,但是必須遵循特定規則的時間戳*文字*。 –

+0

也許我沒有寫得對。我的意思是,格式只包括年,月,日,時,分,秒,但沒有表明時區已包含在內 –

相關問題