如何在不转换为datetime的情况下截断"Ticks"的毫秒数?

use*_*er1 6 c# datetime

我有两次Ticks这样:

//2016-01-22?T17:34:52.648Z
var tick1 = 635890808926480754;

//2016-01-22?T17:34:52.000Z
var tick2 = 635890808920000000;
Run Code Online (Sandbox Code Playgroud)

现在你可以看到比较这两个数字 tick1 == tick2 returns false

虽然日期是相同的(除了毫秒).

我想截断这些数字的毫秒数而不将其转换为日期时间(因为这会降低效率)

我看过Math.Round,它说:

将值舍入为最接近的整数或指定的小数位数.

还有Math.Truncate我认为我不需要做什么.

看着Datetime.Ticks它说:

单个刻度表示一百纳秒或一千万分之一秒.一毫秒内有10,000个刻度,或者一秒钟内有1000万个刻度.

因此,我需要将数字减少到最接近的一千万.

这可能吗?

Dmi*_*try 11

你可以使用整数除法:

if (tick1 / TimeSpan.TicksPerSecond == tick2 / TimeSpan.TicksPerSecond)
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为如果你除long/ inta long/ int结果也是long/ int因此截断小数部分.

  • @ user1因为他正在截断.如果你用`long`或`int`来表示`long`或`int`,结果也是一个`long`或`int`截断小数部分. (2认同)
  • @scottChamberlain你是对的.来自数学背景,我讨厌计算机科学中的数字 (2认同)

Tho*_*oub 6

你可以用这个:

if(Math.Abs(tick1 - tick2) < TimeSpan.TicksPerSecond)
Run Code Online (Sandbox Code Playgroud)

这避免了分裂.

您可以使用以下任何一项调整所需的精度:

  • TimeSpan.TicksPerDay
  • TimeSpan.TicksPerHour
  • TimeSpan.TicksPerMinute
  • TimeSpan.TicksPerSecond
  • TimeSpan.TicksPerMillisecond