我正在尝试使用准备好的语句将包含日期、时间和时区的字符串插入到带有我的数据库的时区字段的时间戳中。
问题是 Timestamp.valueof 函数没有考虑字符串包含的时区,因此会导致错误。接受的格式是 yyyy-[m]m-[d]d hh:mm:ss[.f...] ,其中没有提及时区。
那是导致错误的确切代码:
pst.setTimestamp(2,Timestamp.valueOf("2012-08-24 14:00:00 +02:00"))
有什么办法可以克服吗??提前致谢!
我正在尝试使用准备好的语句将包含日期、时间和时区的字符串插入到带有我的数据库的时区字段的时间戳中。
问题是 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");
我相信您可以在数据库中再使用一个字段,其中包括时区。并在获得这两个字段后手动计算时间