如何截断毫秒数" Ticks"没有转换到datetime?

时间:2016-01-26 16:04:31

标签: c# datetime

我在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我认为我不需要这样做。

Datetime.Ticks它说:

  

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

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

这可能吗?

3 个答案:

答案 0 :(得分:11)

您可以使用整数除法:

if (tick1 / TimeSpan.TicksPerSecond == tick2 / TimeSpan.TicksPerSecond)

这是有效的,因为如果您将long / int除以long / int,结果也是long / int因此截断小数部分。

答案 1 :(得分:6)

您可以使用:

if(Math.Abs(tick1 - tick2) < TimeSpan.TicksPerSecond)

避免分裂。

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

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

答案 2 :(得分:-1)

将它除以1000:

Long Seconds = 635890808926480754/1000

//Seconds = 635890808926480