C#比较两个日期时间

13

我有两个日期:

DateTime date_of_submission = Convert.ToDateTime(DateTime.Now.ToString("MM/dd/yyyy"));
DateTime _effective_date = Convert.ToDateTime(TextBox32.Text);

现在,生效日期不能超过提交日期未来90天。

我该怎么比较日期呢?

我能想到的一种方法是将日期时间转换为字符串,然后比较dd、mm、yyyy,看这两个日期是否相差不超过90天。但我相信肯定有更好的解决方案。


1
在谷歌上搜索“DateTime.Subtract”,你会找到很多帮助。 - drew_w
Datetime.Subtract(甚至只需使用-运算符)将为您提供一个TimeSPan对象,我认为它有一个“TotalDays”属性。针对它进行测试。 - Martin Milan
2
您还可以避免调用 Convert.ToDateTime(DateTime.Now.ToString("MM/dd/yyyy")),而是直接调用 DateTime.NowDateTime.Now.Date - Sam
1
@Sam 当然,后者甚至有自己的名称,即属性DateTime.Today - Jeppe Stig Nielsen
6个回答

26
您可以减去两个日期,得到一个时间间隔 TimeSpan
TimeSpan difference = _effective_date - date_of_submission;
if(difference.TotalDays > 90)
{
  // Bingo!
}

我认为这个问题是在问如果两个日期之间相差不超过90天,那么这只有在 _effective_datedate_of_submission 之后才能起作用,而反过来则不行,对吗? - Sam
1
我想我假设生效日期应该在提交日期之后。所以这会起作用 :) - Philo
1
如果两个方向都需要,可以使用 difference.Duration.TotalDays > 90Duration 给出了相同大小的正时间跨度。 - Jeppe Stig Nielsen

4
var days = (_effective_date - date_of_submission).Days;

1
我正在考虑天数与总天数的问题...例如,如果我们有35天的间隔,"Days"会返回35还是返回34(或其他),而"Months"会返回1? - Martin Milan
2
由于一天是时间跨度中最重要的组成部分,因此DaysTotalDays之间除了精度之外没有实际区别。OP的问题可以通过任何一个回答。 - Christian Hayter

3

类似于...

        TimeSpan difference = _effective_date - date_of_submission;
        double days = difference.TotalDays;

        if (days > 0 && days <= 90)
        {
            //valid
        }

1
您可以像比较普通数据一样比较两个日期时间值。
因此,您可以执行以下操作:
if(date_of_effective_date.CompareTo(date_of_submission_date.AddDays(90)) <= 0)
{
 //Correct
}

0

这是一个比较日期时间的示例。您可以根据自己的需求进行更改。

 DateTime dtFromDate = DateTime.ParseExact(TextBoxFromDate.Text, "dd/MM/yyyy",
                                                   CultureInfo.InvariantCulture);
 DateTime dtToDate = DateTime.ParseExact(TextBoxToDate.Text, "dd/MM/yyyy",
                                                   CultureInfo.InvariantCulture);
 TimeSpan difference = dtFromDate - dtToDate;
 double days = difference.TotalDays;

 if (days > 0)
 {
   DivFormError.InnerText = "“From Date” cannot be greater than “To Date”";
 }

0

虽然有几种有效的解决方案,但这可能是未来搜索者的其中之一。

DateTime date_of_submission = Convert.ToDateTime(DateTime.Now.ToString("MM/dd/yyyy"));
DateTime _effective_date = Convert.ToDateTime(TextBox32.Text);

DateTime lastPossibleEffectiveDate = _effective_date.AddDays(90);

int result = DateTime.Compare(_effective_date,lastPossibleEffectiveDate);
if (result <= 0)
    Console.WriteLine("Valid Date");
else if (result > 0 )
    Console.WriteLine("Not Valid effective date");

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