我怎样才能插入带有时区的时间戳在准备好的声明PostgreSQL的?(How can i inser

2019-08-03 10:41发布

我试图插入到我的DB串包括日期,时间和时区用事先准备好的声明中区字段的时间戳。

问题是,Timestamp.valueof功能不考虑该字符串inludes所以它会导致错误的时区。 所接受的格式是YYYY- [米]间 - [d] d为hh:mm:ss的[.F ...]没有提及时区。

这是导致该错误的确切代码:

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

有什么办法,我可以克服它? 提前致谢!

Answer 1:

最根本的问题是,java.sql.Timestamp中不包含时区信息。 我认为它总是假定为“本地时区”。

在解决方案,我能想到的是不使用在PreparedStatement的参数,但在SQL一个时区的文字:

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

另一种可能的解决方案可以是一个适当格式化的字符串传递给一个使用TO_TIMESTAMP()一个PrepareStatement:

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");


Answer 2:

我相信,你可以在数据库中使用一个多场,其中包括时区。 并计算时间后手动你得到这两个字段



文章来源: How can i insert timestamp with timezone in postgresql with prepared statement?