Nullable-如何在C#中的DateTime类型中仅比较没有时间的日期?

时间:2014-10-16 12:21:19

标签: c# .net datetime

如何在C#中的DateTime类型中仅比较没有时间的日期。日期之一将是可空的。我怎么能这样做?

7 个答案:

答案 0 :(得分:3)

DateTime val1;
DateTime? val2;

if (!val2.HasValue)
    return false;

return val1.Date == val2.Value.Date;

答案 1 :(得分:2)

您可以使用Date对象

DateTime属性
Datetime x;
Datetime? y;

if (y != null && y.HasValue && x.Date == y.Value.Date)
{
 //DoSomething
}

答案 2 :(得分:0)

如果可空日期为null,则使用短路来避免比较,然后使用DateTime.Date属性来确定等效性。

bool Comparison(DateTime? nullableDate, DateTime aDate) {
    if(nullableDate != null && aDate.Date == nullableDate.Value.Date) {
        return true;
    }

    return false;
}

答案 3 :(得分:0)

bool DatesMatch(DateTime referenceDate, DateTime? nullableDate)
{
    return (nullableDate.HasValue) ? 
        referenceDate.Date == nullableDate.Value.Date : 
        false;
}

答案 4 :(得分:0)

如果您想要真正的比较,可以使用:

    Datetime dateTime1
    Datetime? dateTime2

    if(dateTime2.Date != null)
       dateTime1.Date.CompareTo(dateTime2.Date);

希望它有所帮助...

答案 5 :(得分:0)

这里唯一具有挑战性的方面是你需要DateTime和Nullable这样的东西。

以下是标准DateTime的解决方案:How to compare only Date without Time in DateTime types in 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);
    }
}

答案 6 :(得分:0)

您可以按照与.net框架比较类似的返回值创建类似下面的方法,当左侧最小时给出-1,对于相等日期给出0,对于右侧最小值给出+1:

    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);
    }

当然,更好的实现方法是为此创建一个扩展方法。