作者:mobiledu2502925687 | 来源:互联网 | 2023-05-17 13:45
我从sql数据库读取到了一个有毫秒级的日期,在sql里查询的日期格式是:2011-08-2323:03:04.710我在VC中取得了这个日期的double数值,如:40778.960471180
我从sql数据库读取到了一个有毫秒级的日期,在sql里查询的日期格式是:2011-08-23 23:03:04.710
我在VC中取得了这个日期的double数值,如:40778.960471180559
这个数据据并不一定是上面的日期,只是想说明一种格式.
我怎么样才能取得毫秒级的数据如日期里的:.710
MS提供了这个函数:
VariantTimeToSystemTime
但这个函数并不能正确的转换出毫秒的数据:
http://support.microsoft.com/kb/297463/zh-cn 这里有说明.
我应该怎么做才能取到毫秒级数据
谢谢
12 个解决方案
我想从double数值转换成有毫秒级的日期,
如 double d1;
d1=40778.960471180559;
怎么样把d1转换成这种格式:
2011-08-23 23:03:04.710
从数据库里以字符串类型读出,然后从找到“.”的位置,RIGHT就可以了。
google 了一下有关的localtime函数,还是没有搞明白怎么把double 转换成日期,LS的能说清楚一点吗?谢谢了
先要看转换成double的时候是否已经丢失了
折中的办法,就获取日期字符串,然后来解析格式
我觉得也许从数据库里读到的double值已经没有ms的信息。看能否以别的数据类型读出,实在没办法就按4楼说的读出“2011-08-23 23:03:04.710”这样的字符串
由于功能上的需要,select语句只能使用 select * from tablename
所以没有办法先转成字符串.
在使用ADO读出来的时个,使用的是VARIANT 类型读出的,读出后的数据类型是VT_DATE.
VT_DATE 就是double 类型
所以读出的数据应该是没有丢失毫秒的
MS提供了这个函数:
VariantTimeToSystemTime
但这个函数并不能正确的转换出毫秒的数据,这个问题MS自己也说明了,但MS没有给出一个解决的方案.
还没有类似VariantTimeToSystemTimer 的函数可用?
自己算咯
总天数 = (long)40778.960471180559 = 40778(起始日期有几种,这里是1899-12-30)
总秒数 = (40778.960471180559 - (long)40778.960471180559) * 24 * 60 * 60 = 82984.7100002976
时 = (long)82984.7100002976 / 3600 = 23
分 = (long)82984.7100002976 / 60 % 60 = 3
秒 = 82984.7100002976 % 60 = 4.7100002976 (注意精度)
即是
秒 = (d - (long)d) * 24 * 60 * 60 % 60
毫秒就是取小数部分, 秒 - (long)秒
日期转换公式比较麻烦,可用VariantTimeToSystemTime转