繁体   English   中英

在C#中,使用tick比较两个日期之间的区别是什么?

[英]In C#, what is the difference between comparing two dates using tick and just as it is

我是C#的新手。 当我遇到这个问题时,我正在编写一些由我工作过的人编写的代码:

if (olderTime.happenedWhen.Ticks > happenedWhen.Ticks)
{
   thisIsTrulyNew = false;
}

无论olderTime.happenedWhenhappenedWhen的类型的DateTime

这是比较DateTime更准确的方法吗?

我知道Ticks代表从0001年1月1日00:00开始的100纳秒间隔。但是为什么在我认为我们可以做的时候进行这种比较:

if (olderTime.happenedWhen > happenedWhen){
   thisIsTrulyNew = false
}

滴答比较是否达到了正常比较不会的效果?

这是比较DateTime更准确的方法吗?

没有丝毫。 实际上,这就是>运算符在内部实现的方式。

.NET参考源

public static bool operator >(DateTime t1, DateTime t2) {
    return t1.InternalTicks > t2.InternalTicks;
}

通过跳过一行内部代码并直接进入Ticks属性,有人可能认为他们很聪明。 实际上, Ticks的getter返回InternalTicks ,因此除非它被编译器优化,否则使用Ticks属性会添加两个调用以保存一个调用(这两个调用都不会显着改变性能)。

operator > for DateTime比较了滴答,正如您从此反汇编代码(mscorlib.dll,System.DateTime类)中可以看到的:

[__DynamicallyInvokable]
public long Ticks
{
    [__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline this type of method across NGen image boundaries")]
    get
    {
        return this.InternalTicks;
    }
}

[__DynamicallyInvokable, TargetedPatchingOptOut("Performance critical to inline across NGen image boundaries")]
public static bool operator >(DateTime t1, DateTime t2)
{
    return t1.InternalTicks > t2.InternalTicks;
}

>运算符的实现如下:

public static bool operator >(DateTime t1, DateTime t2)
{
   return t1.InternalTicks > t2.InternalTicks;
}

所以它真的一样( Ticks返回InternalTicks )。

消息来源显示:

    public static bool operator >(DateTime t1, DateTime t2) {
        return t1.InternalTicks > t2.InternalTicks;
    }

这是

    internal Int64 InternalTicks {
        get {
            return (Int64)(dateData & TicksMask);
        }
    }

其中dateData在构造函数中设置,只是引用dateData = (UInt64)ticks; TicksMask

private const UInt64 TicksMask = 0x3FFFFFFFFFFFFFFF;

这是一回事。 源代码中>运算符定义为:

public static bool operator >(DateTime t1, DateTime t2) 
{
      return t1.InternalTicks > t2.InternalTicks;
}

为了完整TicksTicks属性定义为:

public long Ticks
{
        get 
        { 
            return InternalTicks; 
        }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM