作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有两个日期时间,一个来自时间戳,另一个是我用代码生成的。我需要测试他们的平等性,并且很乐意在没有太多表达的情况下做到这一点。这是我的两个约会的示例:
DateTime expireTimeStampUTC =
DateTime.Parse(UTCValueFromDatabase));
DateTime expectedExpireTime =
DateTime.UtcNow.AddHours(NumberOfExpectedHoursInConfig);
这个测试的精度太高了:
if (expireTimeStampUTC.Equals(expectedExpireTime)){}
我不在乎它们是否精确到秒,只在乎小时。
这可能是做这样的复合的最佳解决方案吗:
if (expireTimeStampUTC.Date.Equals(expectedExpireTime.Date))
{
if (!expireTimeStampUTC.Hour.Equals(expectedExpireTime.Hour))
{
pass = false;
}
}
我不是最有 C# 经验的人...有什么优雅的方法可以做到这一点吗?
最佳答案
如果您遇到的问题是因为它们是数据库类型,您可以转换为该类型并在那里进行比较,我们在大约 1/3 的数据库保存中损失/增加了大约 1 毫秒转换为 SQLDateTimes。
如果不是,比较你真正关心的单位:
DateTime dt1 = DateTime.UtcNow;
DateTime dt2 = DateTime.UtcNow.AddMinutes(59); // or 1 or 61 for test values;
// if the dates are in the same hour (12:10 == 12:50, 1:58 != 2:02)
if(dt1.Hour == dt2.Hour) // result
或者如果你关心他们在一个小时的时间跨度内
// if the dates are within one hour of each other (1:58 == 2:02, 3:30 != 4:45)
if((dt1 - dt2).Duration() < TimeSpan.FromHours(1)) // result
此处减去日期会生成一个时间跨度,持续时间是“绝对值”,然后我们根据我们关心的单位 (FromHours) 明确创建限制并进行比较。
最后一行是我能想到的在特定时间跨度内实现平等的最干净的方式。
关于c# - 在 C# 中比较两个 DateTimes 是否相等的最佳方法是什么...但仅限于一定的精度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/613041/
我是一名优秀的程序员,十分优秀!