日期连续两天休息

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我正在使用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

插入的行是表中唯一一个非空日期的行,因此这看起来不是读取错误记录的情况。

我认为这将是一个众所周知的问题,但我可以通过谷歌搜索找到“两天休息”问题的唯一参考没有确定的答案。

有任何想法吗?

提问于
用户回答回答于

错误的JDBC驱动程序

原来问题是MS jdbc驱动程序。我尝试了所有可能的日期类型和日期转换组合,但都没有成功。经过大量搜索之后(应该首先完成这一步),我看到了对旧版SO条目的评论,这意味着问题是来自Microsoft的第3版jdbc驱动程序。我得到了最新的驱动程序,版本4.something,并且问题消失了。

用户回答回答于

对于那些正在使用maven的人,请将其用于java 8:

 <dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.2.1.jre8</version>
 </dependency>

正如所指出的那样,如果您使用旧版本,则可能会遇到此问题,并且调试起来并不容易。

扫码关注云+社区