急!如果求两个系统时间(SYSTEMTIME)的时间差,或者两个DATE(double)的时间差?

时间:2022-04-23 01:33:12
我现在存储了两个系统时间SYSTEMTIME time1;SYSTEMTIME time2; 如何求这两个时间之间的差值?
如果将这两个系统时间使用SystemTimeToVariantTime转换成DATE(VS2005的定义:typedef DATE double)后又该如何求这两个时间的差值?
最后结果用秒或者毫秒表示都行

10 个解决方案

#1


直接用TDateTime 去加减

#2


我忘了说了,我是在VS2005下做COM组件开发,不是在C++Builder下

#3


一样的
时间本来就可以相加减的
如:

SYSTEMTIME time1;
SYSTEMTIME time2;
int a = time1.wSecond - time2.wSecond ;//相差秒
int b = time1.wMinute - time2.wMinute ; //相差分

#4


VS2005一样可以直接加减

#5


呃。。。
如果这样计算的话太麻烦了,这还涉及到年份,月份,时间差值算起来有点麻烦的,有没有更简单一点的呢?

#6


时,分,秒分别相减,然后乘以相应的秒倍数,如小时乘以3600,分钟乘以60,然后再相加。

#7


我现在就是按照妖哥的说的方法搞的,暂时顶一阵子,就是感觉不是很精确,万一时间要是跨月份,甚至不巧刚好还跨个年份了呢,这个就不能这么算了,所以现在想找个比较简单准确的计算方法。
用SystemTimeToVariantTime转换成double后两个相减,不知道能不能有什么办法换算成秒的?

#8


可以参考一下VCL中DateUtils.pas单元中,SecondsBetween函数的实现。

#9


学习了,顶

#10


SystemTimeToFileTime

It is not recommended that you add and subtract values from the FILETIME structure to obtain relative times. Instead, you should

Copy the resulting FILETIME structure to a ULARGE_INTEGER structure. 
Use normal 64-bit arithmetic on the ULARGE_INTEGER value.
 
用QuadPart相减就可以了

#1


直接用TDateTime 去加减

#2


我忘了说了,我是在VS2005下做COM组件开发,不是在C++Builder下

#3


一样的
时间本来就可以相加减的
如:

SYSTEMTIME time1;
SYSTEMTIME time2;
int a = time1.wSecond - time2.wSecond ;//相差秒
int b = time1.wMinute - time2.wMinute ; //相差分

#4


VS2005一样可以直接加减

#5


呃。。。
如果这样计算的话太麻烦了,这还涉及到年份,月份,时间差值算起来有点麻烦的,有没有更简单一点的呢?

#6


时,分,秒分别相减,然后乘以相应的秒倍数,如小时乘以3600,分钟乘以60,然后再相加。

#7


我现在就是按照妖哥的说的方法搞的,暂时顶一阵子,就是感觉不是很精确,万一时间要是跨月份,甚至不巧刚好还跨个年份了呢,这个就不能这么算了,所以现在想找个比较简单准确的计算方法。
用SystemTimeToVariantTime转换成double后两个相减,不知道能不能有什么办法换算成秒的?

#8


可以参考一下VCL中DateUtils.pas单元中,SecondsBetween函数的实现。

#9


学习了,顶

#10


SystemTimeToFileTime

It is not recommended that you add and subtract values from the FILETIME structure to obtain relative times. Instead, you should

Copy the resulting FILETIME structure to a ULARGE_INTEGER structure. 
Use normal 64-bit arithmetic on the ULARGE_INTEGER value.
 
用QuadPart相减就可以了