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

也许我没有写得对。我的意思是,格式只包括年,月,日,时,分,秒,但没有表明时区已包含在内 –

相关问题