用java读取sql server的时间时碰到一个奇怪的问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 08:41:16
在sql里有1978到2000年的完整时间序列如下:
1978-1-1
1978-1-2
。。。。。
2000-12-31
在用java连接sql数据库读取这个时间序列时出现了以下错误:
1978-1-1
1978-1-2
。。。。。
1986-4-9
1986-4-11
1986-4-11
1986-4-13
。。。。
即出现了两个1986-4-10,且没有1986-4-11,改变输出格式后发现出现两个986-4-11但小时数分别是00:00:00和23:00:00上,而其他时间的小时数均是00:00:00,如下所示
Sat Apr 10 00:00:00 CST 1986
Sat Apr 11 00:00:00 CST 1986
Sat Apr 11 23:00:00 CST 1986
Sat Apr 13 00:00:00 CST 1986
这样的数据一般隔几年出现一次,请问各位大侠这个问题应该怎样才能解决呀?到底是怎么回事呀?弄得我一头雾水,谢谢各位了
不好意思,文中有点错误,是出现了两个1986-4-11,且没有1986-4-12

谢谢各位的回答,sql server2000中的原数据我再三地检查过了,肯定是没有问题的,类型是datatime型。读取出1978-1-1这种类型的结果用的是=rs.getDate("TM");读取出Sat Apr 10 00:00:00 CST 1986这种类型的结果用的是=new java.util.Date(rs.getTimestamp("TM").getTime()) ,另外,如果用getString读取的话,结果和上面的结果是一样的,即出现Sat Apr 11 23:00:00 CST 1986

最值得注意的是我今天又运行一遍程序后,发现出错的时间变了,不是出现两个1986-4-11了,二是出现两个1986-5-3.这应该从另一个角度说明了不是原数据的问题吧

你到数据库里里看看原数据,难道取出的数据和数据库中的数据库的不一样吗?
我的意思就是说你先看看数据库的数据对不对。。
还有你的数据库的这个字段的类型是什么类型。。

你用的类型应该是datatime吧。如果是sql2005的话。
不过如果是和数据库的数据不一样的话,
就不是很清楚了。
也对,
等待正真的高手出现吧
想转化1986-5-3.的话其实不需要String,
在java中有个是date的格式化接口。
不过你的问题我不知道。
呵呵

在java中,Date类的数据就是这种标准格式,也就是你看到的
Sat Apr 10 00:00:00 CST 1986
但是你要是只想拿到1978-1-1 这个格式的话,最好就是将其作为String类型从数据库读出;

关注一下,等待高手