Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 两个日期时间变量何时相等?_C#_Asp.net_Vb.net - Fatal编程技术网

C# 两个日期时间变量何时相等?

C# 两个日期时间变量何时相等?,c#,asp.net,vb.net,C#,Asp.net,Vb.net,我尝试比较Datetime。现在使用Datetime.CompareTo()方法设置Datetime变量。我使用计时器每秒比较一次并显示结果,但当当前时间接近我设置的时间时,结果从1变为-1,但从不为0,这意味着这两者永远不相等。我怀疑Datetime结构包含毫秒 你猜对了。但它的速度超过了毫秒。最大分辨率为,等于100纳秒。您的怀疑是正确的。DateTime结构的最小单位是以100ns为单位的。(一个刻度为100ns) 您更可能想做的是检查所有的时间是否都相等,您可以这样做,首先比较属性,然后

我尝试比较Datetime。现在使用Datetime.CompareTo()方法设置Datetime变量。我使用计时器每秒比较一次并显示结果,但当当前时间接近我设置的时间时,结果从1变为-1,但从不为0,这意味着这两者永远不相等。我怀疑Datetime结构包含毫秒

你猜对了。但它的速度超过了毫秒。最大分辨率为,等于100纳秒。

您的怀疑是正确的。DateTime结构的最小单位是以100ns为单位的。(一个刻度为100ns)


您更可能想做的是检查所有的时间是否都相等,您可以这样做,首先比较属性,然后分别比较小时、分钟和秒属性

日期时间比较比秒更精确。在您的场景中,您可以定义一个“错误范围”,例如,如果两个
DateTime
之间的间隔小于1秒,则认为它们是相同的(在您的程序中)。

请尝试此。。。(当然,改变考试日期)

DateTime d1=新的日期时间(2011,12,27,4,37,17);
DateTime d2=DateTime.Now;

如果(d1.减去(d2).秒,如其他人所述,分辨率为100ns


最简单的方法是使用DateTime并减去DateTime.Now。然后得到一个TimeSpan。如果TimeSpan的TotalSeconds属性为0,则它们之间的差值小于一秒。

我更喜欢比较DateTime(以及double)不是使用精确值,而是使用值范围,因为不太可能获得精确值

    DateTime d1  = new DateTime(2011, 12, 27, 4, 37, 17);
    DateTime d2  = DateTime.Now;

    if ((d2 >= d1) && (d2 <= d1.AddMinutes(1)))
       ....
DateTime d1=新的日期时间(2011,12,27,4,37,17);
DateTime d2=DateTime.Now;
如果((d2>=d1)&(d2
)模拟两个日期时间的比较
d1=日期时间。现在
线程。线程。睡眠(250)
d2=日期时间。现在
'查看两个日期是否相隔一秒钟
变光ts为双精度=((d2-d1).TotalSeconds)
如果ts<1,则
“相等
Debug.WriteLine(“EQ”和ts.ToString(“n4”))
其他的
Debug.WriteLine(“neq”和ts.ToString(“n4”))
如果结束

TimeSpan.TotalSeconds是一个双精度值,因此您应该检查<1.0而不是==0注意,尽管DateTime结构精确到100ns,“Now”属性在实践中仅精确到1/64秒。计时器的精度不需要反映其精度。这两种工具用于不同的事情。知道现在是什么时间不同于知道两个事件之间经过了多少纳秒。时钟的精度应该与其精度相称。你不需要您的计算机中没有原子钟;即使您将其与time.gov同步,您的计算机时钟通常精确到不到1/64秒,因此它的精确性比精确性更高是没有任何意义的。性能并不重要;这是硬件的问题。您的计算机中没有一个时钟可以告诉您什么不准确ime具有纳秒精度。有一个时钟可以测量处理器循环了多少次,但除非你知道第一个循环发生在纳秒精度范围内的时间,否则告诉你它是什么时间是没有用的。现在,假设你有这样一个时钟,你从中获得了纳秒精度。如果有线程呢在将时间放入变量和读取变量之间进行切换?在这种常见情况下,时钟只会告诉你它过去是什么时间,而不是现在是什么时间。纳秒级的时钟是无用的,因为它的精度是由线程切换的频率决定的。这并非巧合,大约是1/64秒秒级。在多线程系统中,时钟比量子更精确是没有任何意义的。实际上,如果差正好是一分钟、一小时等,秒将是0。您必须使用TotalSeconds。
    DateTime d1  = new DateTime(2011, 12, 27, 4, 37, 17);
    DateTime d2  = DateTime.Now;

    if ((d2 >= d1) && (d2 <= d1.AddMinutes(1)))
       ....
    'simulate comparison of two datetimes
    d1 = DateTime.Now
    Threading.Thread.Sleep(250)
    d2 = DateTime.Now

    'see if two dates are within a second of each other
    Dim ts As Double = ((d2 - d1).TotalSeconds)
    If ts < 1 Then
        'equal
        Debug.WriteLine("EQ " & ts.ToString("n4"))
    Else
        Debug.WriteLine("neq " & ts.ToString("n4"))
    End If