【问题标题】:Queried date value moves by 2 days查询的日期值移动 2 天
【发布时间】:2014-05-30 00:30:56
【问题描述】:

我正在尝试学习 Spring Data,并且正在使用 JpaRepository 尝试从数据库中查询日期对象。但是,每次我查询日期时,结果总是比我的预期值提前两天。时间部分似乎是正确的;只是日期错误。问题是,只有当我在我的机器上编译代码时才会发生这种情况。在另一个人身上这样做会产生正确的结果。有什么我需要看的吗?任何帮助将不胜感激。

数据库值:2014-05-29 19:47:00.576

下面的 testRepo() 改为返回 2014-05-27 19:47:00.576。

public void testRepo() {            
    System.out.println(repo.findByName("TESTDATE").getValue()); 
}

===========

@Autowired
private EntityManager em;

public DateObject findByName(String name) {

    StringBuffer sql = new StringBuffer();
    sql.append("select * ");
    sql.append("from static_dates ");
    sql.append("where name = '" + name + "'");      

    Query q = em.createNativeQuery(sql.toString(), DateObject.class);

    List<DateObject> resultList = q.getResultList();

    System.out.println(resultList.get(0).getValue());

    return resultList.get(0);
}

=========

@Entity
@Table(name = "static_dates") 
public class DateObject {

    @Id
    @Column(name = "name")
    private String name;

    @Column(name = "description")
    private String description;

    @Column(name = "value")
    private Date value;

    public Date getValue() {
        return value;
    }

    public void setValue(Date value) {
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

此外,保存日期值会产生正确的结果。例如,如果我调用 repo.save( ... ) 并传递当前系统日期,则相同的值会反映在数据库中。只有 SELECT 调用似乎不正确。

【问题讨论】:

  • 看来你的代码没什么问题,说了这么多,请问你的代码连接的是同一个数据库吗?
  • 是的。更新数据库中的值也会更改测试方法的结果(同样,结果比预期日期提前两天)。我知道我正在做的唯一区别是添加 MSSQL 的 sendTimeAsDatetime=false 连接属性,但我非常怀疑这是问题的原因。

标签: java sql-server spring-data-jpa


【解决方案1】:

通过将我的 MS SQL 驱动程序从 v3.0 更新到 v4.0 解决了这个问题。

【讨论】:

  • v3 可能使用 1899-12-30 作为基准日期(来自 Excel 和其他一些程序的工件),而 v4 使用 1900-01-01(更符合 SQL Server 的基准日期)。
猜你喜欢
  • 2011-04-23
  • 1970-01-01
  • 1970-01-01
  • 2016-12-16
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多