如何在C#中仅比较DateTime类型中的日期而不是时间。其中一个日期将是可空的。我该怎么做?
DateTime val1;
DateTime? val2;
if (!val2.HasValue)
return false;
return val1.Date == val2.Value.Date;
return val2.HasValue ? val1.Date == val2.Value.Date : false;
。 - Dmitry Bychenkoreturn val2.HasValue && val1.Date == val2.Value.Date;
? - Chris DunawayDateTime
对象的Date
属性。Datetime x;
Datetime? y;
if (y != null && y.HasValue && x.Date == y.Value.Date)
{
//DoSomething
}
y
为空,则失败。 - Tim Schmelter这里使用短路来避免比较,如果可空日期为null,则使用DateTime.Date属性确定等价性。
bool Comparison(DateTime? nullableDate, DateTime aDate) {
if(nullableDate != null && aDate.Date == nullableDate.Value.Date) {
return true;
}
return false;
}
bool DatesMatch(DateTime referenceDate, DateTime? nullableDate)
{
return (nullableDate.HasValue) ?
referenceDate.Date == nullableDate.Value.Date :
false;
}
如果你想要一个真正的比较,你可以使用:
Datetime dateTime1
Datetime? dateTime2
if(dateTime2.Date != null)
dateTime1.Date.CompareTo(dateTime2.Date);
希望能有所帮助...
这里唯一具有挑战性的方面是您想要一个既是DateTime又可为空的东西。
以下是标准DateTime的解决方案:如何在C#中仅比较日期而不是时间?
if(dtOne.Date == dtTwo.Date)
对于可空类型,这只是一个选择问题。我会选择使用扩展方法。
class Program
{
static void Main(string[] args)
{
var d1 = new DateTime(2000, 01, 01, 12, 24, 48);
DateTime? d2 = new DateTime(2000, 01, 01, 07, 29, 31);
Console.WriteLine((d1.Date == ((DateTime)d2).Date));
Console.WriteLine((d1.CompareDate(d2)));
Console.WriteLine((d1.CompareDate(null)));
Console.WriteLine("Press enter to continue...");
Console.ReadLine();
}
}
static class DateCompare
{
public static bool CompareDate(this DateTime dtOne, DateTime? dtTwo)
{
if (dtTwo == null) return false;
return (dtOne.Date == ((DateTime)dtTwo).Date);
}
}
private static int Compare(DateTime? firstDate, DateTime? secondDate)
{
if(!firstDate.HasValue && !secondDate.HasValue)
return 0;
if (!firstDate.HasValue)
return -1;
if (!secondDate.HasValue)
return 1;
else
return DateTime.Compare(firstDate.Value.Date, secondDate.Value.Date);
}
DateTime? < DateTime
? - Soner Gönül