Java JDBC:日期始终保持两天
问题内容:
我正在使用Java JDBC将日期写到SQL Server 2008,然后将其读回。
回读的日期始终比实际写入的日期早两天。
我正在使用准备好的语句插入包含Date字段的行。日期值由以下人员提供:
java.sql.Date todaysDate = new java.sql.Date(System.currentTimeMillis()) ;
System.out.println(todaysDate.toString()) // -> 2012-07-02
ps.setDate(8, todaysDate);
将日期写入数据库后,如果运行,SQL Server将向我显示正确的日期:
select date from table_name where date!=null // ->2012-07-02
如果我通过JDBC运行相同的查询,则使用以下命令从结果集中检索日期值
java.sql.Date sqlDate = rs.getDate("date") ;
sqlDate.toString() // ->2012-06-30
插入的行是表中唯一具有非空日期的行,因此这似乎不是读取错误记录的情况。
我以为这将是一个众所周知的问题,但是我只能通过Google搜索找到的关于“两天假”问题的唯一参考资料没有明确的答案。
有任何想法吗?
卑鄙的(过去的生活)
问题答案:
错误的JDBC驱动程序
原来问题出在MS
JDBC驱动程序。我尝试了日期类型和日期转换的所有可能组合,但没有任何效果。经过大量搜索(首先应该做的是!),我看到一条关于较旧的SO条目)的评论,该条目暗示问题是Microsoft的版本3
JDBC驱动程序。我得到了最新的驱动程序版本4.something,问题消失了。
感谢所有尝试提供帮助的人。特别感谢Mike抽出宝贵时间发布解决方案。
-=强壮