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抽出宝贵时间发布解决方案。

-=强壮