我正在尝试使用准备好的语句将一个字符串插入到数据库的带有时区字段的时间戳中,其中包括日期、时间和时区。
问题是 Timestamp.valueof 函数没有考虑字符串包含的时区,因此会导致错误。
接受的格式是 yyyy-[m]m-[d]d hh:mm:ss[.f...] ,其中未提及时区。
这是导致错误的确切代码:
pst.setTimestamp(2,Timestamp.valueOf("2012-08-24 14:00:00 +02:00"))
有什么办法可以克服吗?
提前致谢!
基本问题是 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");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)