【问题标题】:SQL and Java return different dates?SQL 和 Java 返回不同的日期?
【发布时间】:2012-05-08 08:39:38
【问题描述】:

我正在使用 sqljdbc4.jar 从我的 java 应用程序连接 SQL Server。我的表中有一个日期字段。当我从 Sql Server Management Studio 检查时,它可以正常工作。但是在java中,每个日期都缺少2天。

例如;

我的日期:2012-01-10

java 中的日期:2012-01-08

PreparedStatement stmt = conn.prepareStatement("SELECT * FROM table1", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery();
rs.next();
System.out.println(rs2.getDate("dateCol").toString());

为什么?

【问题讨论】:

  • 您可以尝试使用 yyyy.MM.dd 格式的 SimpleDateFormat 而不是 .toString 方法吗?
  • 检查您的数据库和 java 的区域设置,您确定您使用的是相同的时区吗?
  • 同样的错误here;建议使用另一个驱动程序,JTDS。
  • 此问题与 Joop Eggen 所链接的问题重复。
  • 我刚刚尝试了 sqljdbc4.jar 版本 4,它已修复。版本 2 也没有问题。只有错误版本是 3。Download link for version 4 感谢您的回答。

标签: java sql sql-server date


【解决方案1】:

我刚刚尝试了 sqljdbc4.jar 版本 4,它已修复。版本 2 也没有问题。只有错误的版本是 3。Download link for version 4

感谢您的回答。

【讨论】:

  • 如果使用 Tomcat,不要忘记检查 lib 目录以获取此 jar 的旧版本。它将覆盖您的 web 应用程序中的任何内容。
【解决方案2】:

您使用的是哪个版本的 SQL Server 和哪种数据类型? SQl Server 2008 上有 6 个“日期和时间”data types

date
datetimeoffset
datetime2
smalldatetime
datetime
time

也许你正在使用的那个在 Java 中或你正在使用的驱动器中不受支持。特别是如果您使用的是 SQL Server 2008 中新增的Date

【讨论】:

    【解决方案3】:

    就像@Eugenio Cuevas 说的 请尝试格式化日期

    您可以尝试使用 SimpleDateFormat 和 yyyy.MM.dd 格式而不是 .toString 方法吗?

    因为看着你约会的例子;可能是我以前遇到的问题 差异是 2 天,因为

    1- 2012-01-10 和 2012-01-08 yyyy-mm-dd 2- 12-01-10 和 12-01-08 yy-mm-dd

    那是什么导致了我的问题

    【讨论】:

      【解决方案4】:

      几周前我遇到了类似的问题。我必须在一个键入 sql 日期的 oracle 表中保存一个 java 日期。您不能直接将 java 日期转换为 sql 日期。以下是我所做的。

      java.util.Date jDate = myObj.getDate();
      java.sql.Date sDate = new java.sql.Date(jDate.getTime());
      

      【讨论】:

        猜你喜欢
        • 2020-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        • 2020-02-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多