c# - 将日期与相同格式进行比较的问题
问题描述
我必须通过比较两个日期来创建一个 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# 代码。我的假设是您正在尝试比较 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
为TotalSeconds
。Math.Abs()
无论时间值是稍早于还是稍晚于比较时间,该调用都可以进行比较。
推荐阅读
- javascript - 如何使 div 内未使用的空间像按钮一样?
- javascript - 如何使用 get 包在请求正文中传递变量
- python - 如何在 replit.com 上保存项目?
- configuration - 如何解决tendermint核心中的“错误:配置文件中的错误:未知模式:节点”?
- c# - 在 .NET Core 中使用 NTS 几何体批量插入
- typescript - 扩展另一个类的类的 TS 类型是什么?
- angular - 元素隐含地具有“任何”类型,因为类型的表达式......当使用需要类型字符串的函数时
- java - 模糊搜索名称
- sql - 如果 TABLE2 中不存在引用行,则更新 Table1,限制更新
- python - 将点/点注释转换为高斯密度图