如何在C#中比较日期

89

我有两个日期,一个是输入的日期,另一个是DateTime.Now。它们都采用mm/dd/yyyy格式,也可以是m/d/yy格式。这两个日期都是可空的,即数据类型为DateTime?,因为我也可以传递null作为输入。现在我想要仅使用mm/dd/yyyym/d/yy格式来比较这两个日期。

3个回答

111
如果您的日期是存储在DateTime变量中的,它们并没有一个固定的格式。您可以使用Date属性返回一个DateTime值,其中时间部分被设置为午夜。因此,如果您有以下内容:
DateTime dt1 = DateTime.Parse("07/12/2011");
DateTime dt2 = DateTime.Now;

if(dt1.Date > dt2.Date)
{
     //It's a later date
}
else
{
     //It's an earlier or equal date
}

18
如果不需要小时、分钟等,建议使用DateTime.Today而不是DateTime.Now.Date - Piotr Auguscik
@Piotr - 很好的观点 - 除非他们还需要访问小时/分钟/秒作为工作的另一部分。 - Damien_The_Unbeliever
1
@Damien_The_Unbeliever 这对于任何日期格式都适用吗? yyyy/MM/dd呢? - SamuraiJack
3
@Arbaaz - 一旦你把任何字符串转换成DateTime,那么就像我在我的回答中所说的那样,它不再有一个格式。它有一个内部表示,并且框架知道如何执行适当的比较。 - Damien_The_Unbeliever

44
如果您有一个DateTime变量中的日期,则它是一个DateTime对象,不包含任何格式。当您调用DateTime.ToString方法并在其中提供格式时,格式化日期将表示为string
假设您有两个DateTime变量,您可以使用比较方法进行比较。
DateTime date1 = new DateTime(2009, 8, 1, 0, 0, 0);
DateTime date2 = new DateTime(2009, 8, 2, 0, 0, 0);
int result = DateTime.Compare(date1, date2);
string relationship;

if (result < 0)
   relationship = "is earlier than";
else if (result == 0)
   relationship = "is the same time as";         
else
   relationship = "is later than";

这段代码片段摘自msdn


14

首先要明白,DateTime对象并没有被格式化。它们只是将年、月、日、小时、分钟、秒等存储为数字值,并在想以某种方式表示为字符串时进行格式化。您可以在不格式化它们的情况下比较DateTime对象。

要将输入日期与DateTime.Now进行比较,您需要首先将输入解析为日期,然后仅比较年/月/日部分:

DateTime inputDate;
if(!DateTime.TryParse(inputString, out inputDate))
    throw new ArgumentException("Input string not in the correct format.");

if(inputDate.Date == DateTime.Now.Date) {
    // Same date!
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接