2

我有 2 个日期,如何比较这 2 个日期并忽略毫秒的差异?

DateTime dte1 = (DateTime)entity.secondDate;
DateTime dte2 = (DateTime)entity.firstDate;

if (DateTime.Compare(dte1, dte2)!=0)
    throw new HttpRequestException(ExceptionMessages.CONCURRENCY_UPDATE);

谢谢。

4

4 回答 4

8

如果我们将您的问题理解为“我如何比较两个 DateTime 对象并在它们之间的间隔小于例如 100 毫秒时将它们视为相等,那么这是最简单的方法?”

double diff = if (dte1.Subtract(dte2)).TotalMilliseconds;
if (Math.Abs(diff) < 100)
{
    Console.WriteLine("It's all good.");
}
于 2013-07-15T18:28:45.893 回答
3

为什么不将 解析DateTime为您最期望的精度(我假设您想要 yyyy-MM-dd HH:mm:ss)。然后比较它们。我意识到这有点啰嗦,但仍然是一个答案。

DateTime dte1 = (DateTime)entity.secondDate;
DateTime dte2 = (DateTime)entity.firstDate;

if (DateTime.Compare(DateTime.ParseExact(dte1.ToString("yyyy-MM-dd HH:mm:ss"), 
                                                       "yyyy-MM-dd HH:mm:ss", 
                                                        null), 
                     DateTime.ParseExact(dte2.ToString("yyyy-MM-dd HH:mm:ss"), 
                                                       "yyyy-MM-dd HH:mm:ss", 
                                                        null)) != 0)
{
    throw new HttpRequestException(ExceptionMessages.CONCURRENCY_UPDATE);
}

抱歉格式错误,只是试图最小化水平滚动。这避免了标记答案出现的问题。

于 2013-07-15T18:49:27.200 回答
3

我做了这个扩展方法

public static bool IsEqual(this DateTime start, DateTime end, long toleranceInMilliseconds = -1)
{
    if (toleranceInMilliseconds < 0)
       toleranceInMilliseconds = 0;

    return Math.Abs((start - end).TotalMilliseconds) < toleranceInMilliseconds;
}
于 2013-09-19T10:59:07.907 回答
2

在比较两者之前,只需执行以下操作:

firstDateTime = firstDateTime.AddMilliseconds(-firstDateTime.Millisecond);
secondDateTime = secondDateTime.AddMilliseconds(-secondDateTime.Millisecond);
于 2013-07-15T18:28:27.203 回答