【问题标题】:Issue comparing Date with the same Format将日期与相同格式进行比较的问题
【发布时间】:2019-09-22 19:19:57
【问题描述】:

我必须创建一个比较两个 Date 的 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)) 

总是 False ?

提前致谢!

【问题讨论】:

  • 这是学习如何使用 free, built-in Step Debugger The First Date is Time 调试自己的代码的绝佳机会意思是,但是没有Time 类型,很难说这种格式是如何起作用的。
  • 这也是一个学习如何格式化代码的机会,以便它在 Stack Overflow 上很好地显示。编辑您的问题并尝试{} 按钮。事实上,你的代码是不可读的边界
  • 如果您无法锻炼/没有 {} 按钮(例如移动网站),请在每个代码行的开头放置(至少)4 个空格
  • 感谢您鼓励我使用 {} 按钮,这是我在堆栈上的第一篇文章。
  • DateTime 没有格式。格式用于将字符串表示解析为DateTime 或用于创建DateTime 的字符串表示。您要比较的是 TimeExpiry DateTime 的值减去 56 小时 1 分钟。尝试将这两个值都放入调试语句中,您就会明白为什么它们不相等。

标签: c# datetime if-statement testing time


【解决方案1】:

您的代码示例没有真正意义,因为它不代表真正的 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 秒内,请将 TotalMinutes 更改为 TotalSecondsMath.Abs() 调用使比较能够工作,无论时间值是稍微早于还是晚于比较时间。

【讨论】:

  • 您好史蒂夫派,感谢您的帮助。不幸的是,我收到消息“无法从“bool”转换为“sbyte”。
  • bool areSame = Math.Abs​​((Time.Subtract(comparisonTime).TotalMinutes)
  • 我的示例中有一个错字:已在上面更正,最后一个“)”应该是分号。 “;”。如果这仍然导致错误,我不确定将在哪里引入签名字节。如果您可以使用您的方法正在运行的确切 C# 代码更新您的问题,那将有所帮助。
猜你喜欢
  • 1970-01-01
  • 2012-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
  • 2017-05-30
  • 2013-10-02
相关资源
最近更新 更多