如何在不转换为日期时间的情况下截断“刻度”的毫秒数

本文关键字:刻度 情况下 转换 日期 时间 | 更新日期: 2023-09-27 18:31:54

我在Ticks中有两个这样的:

//2016-01-22​T17:34:52.648Z
var tick1 = 635890808926480754;
//2016-01-22​T17: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