如何在不转换为日期时间的情况下截断“刻度”的毫秒数
本文关键字:刻度 情况下 转换 日期 时间 | 更新日期: 2023-09-27 18:31:54
我在Ticks
中有两个这样的:
//2016-01-22T17:34:52.648Z
var tick1 = 635890808926480754;
//2016-01-22T17:34:52.000Z
var tick2 = 635890808920000000;
现在,您可以看到比较这两个数字tick1 == tick2 returns false
尽管日期相同(毫秒除外)。
我想截断这些数字的毫秒数而不将其转换为日期时间(因为这会降低效率)
我看过Math.Round,上面写着:
将值舍入为最接近的整数或指定的小数位数。
还有 Math.Truncate 我认为两者都不能做我需要的。
查看日期时间,它说:
单个刻度表示一百纳秒或千万分之一秒。一毫秒内有 10,000 个刻度,或一秒钟内有 1000 万个刻度。
因此,我需要将数字四舍五入到最接近的一千万。
这可能吗?
您可以使用整数除法:
if (tick1 / TimeSpan.TicksPerSecond == tick2 / TimeSpan.TicksPerSecond)
这是有效的,因为如果将long
/int
除以long
/int
则结果也是long
/int
因此截断了小数部分。
你可以使用这个:
if(Math.Abs(tick1 - tick2) < TimeSpan.TicksPerSecond)
避免做分裂。
您可以使用以下任一方法调整所需的精度:
-
TimeSpan.TicksPerDay
-
TimeSpan.TicksPerHour
-
TimeSpan.TicksPerMinute
-
TimeSpan.TicksPerSecond
-
TimeSpan.TicksPerMillisecond
像这样将其除以 1000:
Long Seconds = 635890808926480754/1000
//Seconds = 635890808926480