我正在使用JavaJDBC将日期写入SQLServer2008,然后将其读回
读回的日期始终比实际写入的日期早两天。
我正在插入包含日期字段的行,其中包含准备好的语句。日期值由以下人员提供:
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
插入的行是表中唯一具有非空日期的行,因此这似乎不是读取错误记录的情况。
我认为这将是一个众所周知的问题,但我在谷歌搜索“两天假”问题时唯一能找到的参考没有明确的答案。
有什么想法吗?
比基(生活在过去)
我最近遇到过几次这个问题,在记住如果字段是date类型时,将字段类型切换为datetime类型解决了这个问题之前,我把自己的头发都扯掉了。
对于使用maven的用户,请在java 8中使用:
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.2.1.jre8</version>
</dependency>
正如所指出的,如果您使用的是旧版本,您可能会面临这个问题,并且调试起来并不容易。
原来问题出在MS JDBC驱动程序上。我尝试了各种可能的日期类型和日期转换组合,但都没有效果。经过大量的搜索(应该先这样做!)我在一个较旧的SO条目上看到了一条评论,这意味着问题出在微软版本3的JDBC驱动程序上。我得到了最新的驱动程序,版本4。然后问题就消失了。
多亏了大家的帮助。特别感谢你,迈克,感谢你花时间发布解决方案。
-=beeky
问题内容: 我正在使用Java JDBC将日期写到SQL Server 2008,然后将其读回。 回读的日期始终比实际写入的日期早两天。 我正在使用准备好的语句插入包含Date字段的行。日期值由以下人员提供: 将日期写入数据库后,如果运行,SQL Server将向我显示正确的日期: 如果我通过JDBC运行相同的查询,则使用以下命令从结果集中检索日期值 插入的行是表中唯一具有非空日期的行,因此这似乎
这是我的html表单: 这是DTO 这里的日期是 此外,当我导入一个JSON文件时,我有一个用户数组,我能够成功地运行它。 我错过了什么? 注意:java.util.date起作用!
问题内容: 当我以编程方式创建一个始终记为生日日历(类型)的日历事件时,我遇到了一个奇怪的问题,我不知道为什么会这样记录日历事件。 我使用的代码如下:Xamarin C# 请问有人有什么提示或想法可以指引我正确的方向吗? 提前致谢。 问题答案: 下面回答的问题是旧的,请参考Pkosta的答案,它提供了更准确的答案… 您必须将CalendarId值设置为3,而不是默认的生日日历1。例如 更改为 它为
下面是片段。请注意,我已经恢复到以前的提交,因此丢失了最近的修改,但请查看我编写的代码,然后才注意到始终等于0() 以下是当检测到活动后按: 以下是NoteActivity接收结果调用的方式。 null 我在我的项目上浪费了很多重要的时间,只是想知道是什么使resultCode和requestCode的值丢失了我发送的值。 任何帮助和指导都将不胜感激。非常感谢!
我开发了一个Android应用程序,提示日历应用程序编辑事件。 我使用打开日历。编辑并保存事件后,在中始终为0。 无论我在日历应用程序中单击“保存”还是“取消”,总是给出0。 另外,我需要从日历intent中获取数据,但是onActivityResult中的intent“data”也返回null。 有人能解释为什么会这样吗?有没有办法知道用户点击“保存”还是“取消”?
我正在尝试将实例转换为实例。 我没有得到编译器错误,但实例值错误。 我认为它不起作用,因为将时间存储在中,而不是中。 我使用的是JDK1.8版。