我正在使用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);
Run Code Online (Sandbox Code Playgroud)
将日期写入db后,如果运行,sql server会显示正确的日期:
select date from table_name where date!=null // ->2012-07-02
Run Code Online (Sandbox Code Playgroud)
如果我通过JDBC运行相同的查询,则使用从结果集中检索日期值
java.sql.Date sqlDate = rs.getDate("date") ;
sqlDate.toString() // ->2012-06-30
Run Code Online (Sandbox Code Playgroud)
插入的行是表中唯一具有非空日期的行,因此这似乎不是读取错误记录的情况.
我认为这将是一个众所周知的问题,但我可以通过谷歌搜索找到"两天休息"问题的唯一参考没有明确的答案.
有任何想法吗?
beeky(生活在过去)
我正在尝试列出使用SQL Server在表中注册的日期,但我的问题是我提取的所有日期与表中的日期相差2天.
例如,我在我的数据库中获得了2012-12-25,当我检索它并将其转换为Java.util.Date时,它就像2012-12-23 ...
我在另一张表中的日期处理过程正常.
我正在使用SQL Server 2008,Hibernate 3和Spring 3.
编辑:
表的列数据类型是日期,我正在使用hibernate检索它,所以这是我的hibernate查询调用:
public List<Holiday> retrieveAllHolidays() {
return (List<Holiday>) sessionFactory.getCurrentSession().createQuery("from Holiday")
.list();
}
Run Code Online (Sandbox Code Playgroud)
假日对象有两个属性:一个字符串和一个日期(从数据库中检索后这个不正确).