Object.ToString函数在转换日期类型数据时的精度问题

  近来有同事向我反应: 页面上显示的时间和数据库显示的时间不一样,足足差了1秒钟。开始我还不信,一看果然是这样.,难道程序有bug?
  下面是具体错误情况描述,数据库中有一datetime类型的字段sj用于记录日期,如:2007-5-29 17:05:09 ,在企业管理器中查看显示为此精度,但我知道,datetime应该可以精确到毫秒,用查询分析器则能够看到更准确的值2007-5-29 17:05:08.752 ,显然,在企业管理器下做了四舍五入的处理。但程序中却并没有对此做四舍五入,而是直接把小数点后面的部分舍去了,因此,显示为2007-5-29 17:05:08 ,这样,就出现了与“真实”时间差了一秒的现象。
  我找到我的源代码,获取日期的方式是把用ADO获取的记录值直接用ToString函数转换成字串,然后再对其进行格式化处理。难道说是ADO在处理的时候直接截掉了毫秒?想想微软的专家们不可能这样做啊。要不就是ToString函数的问题。为了验证到底ADO是怎么处理的,我又做了一个测试,不用ToString函数,而是直接将获取的数据转换为日期对象,然后再对其进行格式化处理,这时,果然显示出记录的精确时间了。看来,真是ToString函数的问题,比如我们定义了SqlDataReader对象rd,这时我们获取到rd["sj"],这是一个Object,我们一般都直接ToString了,结果就会出现上面所说的误差。
  找到了原因,也就找到了解决方法,一般情况这样可能对于我们的程序并没有太大的影响,但如果要求较高,就不要直接使用ToString方法了,而是先转换为日期格式,再根据自己的需要对其进行适当的处理就行了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客行天下

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值