首页 > 解决方案 > 将日期与相同格式进行比较的问题

问题描述

我必须通过比较两个日期来创建一个 if 函数:第一个日期是时间。第二个日期是来自固定日期的日期。

我的代码:

if (Time == contractNSQ100.Expiry.AddHours(-57).AddMinutes(59))
{
True
}
else
{
False
}

我已经用以下方式测试了我的格式:

  Debug ("contractNSQ100.Expiry.AddHours(-57).AddMinutes(59) :" + contractNSQ100.Expiry.AddHours(-57).AddMinutes(59));

 // Return : 9/14/2010 3:59:00 PM

我几乎用 Debug 方法测试了我的时间格式,这返回了相同的格式。

 // Return : 6/14/2010 3:55:00 AM

但是我的 If 语句总是返回 False。

有人知道为什么要进行测试:

if (Time == contractNSQ100.Expiry.AddHours(-57).AddMinutes(59)) 

总是假的?

提前致谢 !

标签: c#datetimeif-statementtestingtime

解决方案


您的代码示例没有真正意义,因为它不代表真正的 C# 代码。我的假设是您正在尝试比较 C# DateTime 变量类型,并且可能会感到困惑,当这些 DateTime 变量被转换为输出中的字符串时,它们可能“看起来”是相同的,但是在测试相等性时你是得到错误的结果。这是因为为日期时间存储的内容(原始二进制数据)和您在将其写入屏幕时看到的内容(有效地调用 .ToString())是两个完全不同的东西。

DateTimes 有效地将时间跟踪到大约毫秒,即使它在您打印时没有输出。因此,您可以拥有两个看起来相同但反映不同值的 DateTime 值。

要查看此内容,请尝试从您的每个值中输出总毫秒或刻度值:

Debug.Writeline(Time.Ticks);
Debug.Writeline(contractNSQ100.Expiry.AddHours(-57).AddMinutes(59).Ticks);

我怀疑你会得到两个相似但不同的数字。

在比较日期时间以进行测试时,首先选择一个阈值,其中时间将被视为相等。如果您只关心时间到分钟,那么我们可以使用分钟作为阈值。从那里我们比较时间:

var comparisonTime = contractNSQ100.Expiry.AddHours(-57).AddMinutes(59);

bool areSame = Math.Abs((Time.Subtract(comparisonTime).TotalMinutes) < 1;

这将比较两次并报告它们是否在 1 分钟内。要确定它们是否在 1 秒内,请更改TotalMinutesTotalSecondsMath.Abs()无论时间值是稍早于还是稍晚于比较时间,该调用都可以进行比较。


推荐阅读