如何在C#中比较日期


67

我有两个约会。输入一个日期,另一个输入DateTime.Now。我有它们的mm/dd/yyyy格式,甚至可以是m / d / yy格式。这两个日期都可DateTime?以为空,即数据类型为,因为我也可以将null用作输入。现在,我只想将两个日期与mm/dd/yyyym/d/yy格式进行比较。

Answers:


89

如果你有你的日期在日期时间变量,他们不具备的格式。

您可以使用该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
}

13
DateTime.Today比您DateTime.Now.Date不需要小时,分钟等更好地使用
Piotr Auguscik 2011年

@Piotr-好点-除非他们也需要访问小时/分钟/秒,作为工作的另一部分。
Damien_The_Unbeliever

1
@Damien_The_Unbeliever可以用于任何日期格式吗?那yyyy/MM/dd
SamuraiJack

3
@Arbaaz-将任何字符串转换为DateTime之后,就像我在回答中所说的那样,它不再具有格式。它具有内部表示,并且框架知道如何执行适当的比较。
Damien_The_Unbeliever

谢谢您提供的帮助
SamuraiJack

37

如果DateTime变量中有date,则其为DateTime对象,不包含任何格式。格式化日期表示为string调用DateTime.ToString方法并在其中提供格式时的日期。

假设您有两个DateTime变量,可以使用compare方法进行比较,

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的代码段。


11

首先,要了解DateTime对象未格式化。它们只是将Year,Month,Day,Hour,Minute,Second等存储为数值,当您想以某种方式将其表示为字符串时,就会进行格式化。您可以比较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!
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.