C# 中是否有一种方法可以像 SQL DateDiff
方法一样比较日期,包括时间部分参数?
例如,我有两个日期:
DateTime early = "2013.02.01 07:31:15";
DateTime soon = "2013.02.01 23:48:35";
if (Compare(early, soon, DAY) == true)
{
//I want to be here
}
我想得到这两个对象在年、月和日上相等的信息;其余的对我来说并不重要。
DateTime.Date
:
if(early.Date == soon.Date)
{
}
如果您想要小时数的准确性:
if(early.Date == soon.Date && early.Hour == soon.Hour)
{
}
但是,使用此解决方案,您将拥有"12/03/1857 23:59"!= "13/03/1857 00:00"。如果您想检查它们的"距离":
if(early.Substract(soon).Duration() <= TimeSpan.FromHours(1))
{
}
.Duration()
获取时间跨度的"绝对"值(因为early.Substract(soon)
可以是"正"或"负")。
您可以使用 DateTime
的 Date
属性来获取日期部分。
在您的情况下,您可以使用:
if (early.Date == soon.Date)
{
....
}
您可以使用 DateTime.Subate 方法来查找差异。
System.TimeSpan diff1 = date2.Subtract(date1);
编辑
如果要比较相等性,只需使用相等运算符==
if(date1 == date2)
{
}
如果你想知道是否是同一天,你不能使用日期差异...
试试这个代码:
if(new TimeSpan(early.Ticks).TotalDays() == new TimeSpan(soon.Ticks).TotalDays()){
// Equal
}
明确说明如何比较两个日期,我认为有点冗长没有任何问题:
public static bool YearMonthDayHourDateCompare(DateTime one, DateTime two)
{
return (one.Year == two.Year &&
one.Month == two.Month &&
one.Day == two.Day &&
one.Hour == two.Hour &&
...);
}
以描述比较的方式命名方法。更好的是,这可能是一种扩展方法:
public static bool CompareDateAndHour(this DateTime one, DateTime two)
{
return (one.Date == two.Date &&
one.Hour == two.Hour &&
...);
}
可以这样使用:
bool datesAreEqual = soon.CompareDateAndHour(two);
var diff=soon-early;
diff.TotalHours or diff.TotalMinutes etc...
要将两个日期与小时精度进行比较,请使用如下所示的内容:
bool match = (soon - early).TotalHours < *your diff limit*;