2

我需要比较两个日期,包括秒数。我在网上搜索并得到了两种方法。一是进口Microsoft.VisualBasic dll。当它运行相同的数据时,结果是不一样的。我认为 C# 应该在不导入 VisualBasic 的情况下做同样的事情。有人可以指点我让它在 C# 中工作的方法吗?

提前致谢。

有一个使用 Microsoft.VisualBasic

 if (Math.Abs(DateAndTime.DateDiff(DateInterval.Second, 
     Conversions.ToDate(colFilesFound[RuntimeHelpers.GetObjectValue(rw["file_path"])]),
     Conversions.ToDate(rw["last_modified_timestamp"]), 
     FirstDayOfWeek.Sunday, FirstWeekOfYear.Jan1)) == 0L)
 {
     unchangedFileNum++;
     Console.WriteLine("unchange");
 }
 else
 {
     modifiedFileNum++;
     Console.WriteLine("change");
 }

还有另一种不使用 Visual.dll 的方法:

DateTime fileLastModifiedDate = Conversions.ToDate(colFilesFound[rw["file_path"]]);
DateTime dataLastModifiedDate = Conversions.ToDate(rw["last_modified_timestamp"]);
if (Math.Abs((fileLastModifiedDate - dataLastModifiedDate).TotalSeconds) == 0L)
{
     Console.WriteLine("File Date: " + colFilesFound[rw["file_path"]] + 
            " <> Database Date: " + Conversions.ToString(rw["last_modified_timestamp"]));
     unchangedFileNum++;
     Console.WriteLine("unchange");
}
else
{
     modifiedFileNum++;
     Console.WriteLine("change");
}
4

2 回答 2

3

在 .NET 中比较 DateTimes 的正确方法是使用 == 运算符或调用DateTime.Compare()方法:

    DateTime fileLastModifiedDate = ...;
    DateTime dataLastModifiedDate = ...;

    if (fileLastModifiedDate == dataLastModifiedDate)
    {
       ...
    }

你需要考虑精度。有时,您没有足够的精度来考虑毫秒。在这种情况下,您需要比较日期而不考虑毫秒:

public static bool IsSameDateWithoutMilliseconds(DateTime d1, DateTime d2)
{
    return d1.Subtract(d2).TotalSeconds == 0;
}
于 2013-03-27T17:34:19.387 回答
0

您的问题可能是毫秒,因为这些可能与您检查日期时间的方式不同。

DateTime fileLastModifiedDate = Conversions.ToDate(colFilesFound[rw["file_path"]]);
DateTime dataLastModifiedDate = Conversions.ToDate(rw["last_modified_timestamp"]);

fileLastModifiedDate = fileLastModifiedDate.AddMilliseconds(-fileLastModifiedDate.Millisecond);
dataLastModifiedDate = dataLastModifiedDate.AddMilliseconds(-dataLastModifiedDate.Millisecond);

if (DateTime.Compare(fileLastModifiedDate, dataLastModifiedDate) == 0)
{
    // dates are equal
}
else
{
    // dates are not equal
}
于 2013-03-27T17:40:36.263 回答