[英]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.happenedWhen
和happenedWhen
的类型的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;
}
为了完整Ticks
, Ticks
属性定义为:
public long Ticks
{
get
{
return InternalTicks;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.