我需要比较两个日期,包括秒。我在网上搜索了两个方法。一个是导入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");
}
答案 0 :(得分:3)
在.NET中比较DateTimes的正确方法是使用==运算符或调用DateTime.Compare()方法:
DateTime fileLastModifiedDate = ...;
DateTime dataLastModifiedDate = ...;
if (fileLastModifiedDate == dataLastModifiedDate)
{
...
}
您需要考虑 preciaion 。有时,您无法考虑毫秒。在这种情况下,您需要比较日期而不考虑毫秒:
public static bool IsSameDateWithoutMilliseconds(DateTime d1, DateTime d2)
{
return d1.Subtract(d2).TotalSeconds == 0;
}
答案 1 :(得分:0)
您的问题可能是毫秒,因为这些问题可能与检查DateTimes的方式不同。
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
}