如何检查日期是否小于或等于今天的日期?

时间:2015-03-25 14:14:41

标签: c#

我需要确定用户输入的日期是否小于或等于今天的日期。

我有以下代码将日期转换为int,然后比较它们的值。是否有更高效或更精益的方式来完成更少的代码?

如何以更少的代码或额外性来实现这一目标?

代码:

class Program
{
    public static bool IsDateBeforeOrToday(string input)
    {
        bool result = true;

        if(input != null)
        {
            DateTime dTCurrent = DateTime.Now;
            int currentDateValues = Convert.ToInt32(dTCurrent.ToString("MMddyyyy"));
            int inputDateValues = Convert.ToInt32(input.Replace("/", ""));

            result = inputDateValues <= currentDateValues;
        }
        else
        {
            result = true;
        }

        return result;
    }

    static void Main(string[] args)
    {
        Console.WriteLine(IsDateBeforeOrToday("03/26/2015"));
        Console.ReadKey();
    }
}

4 个答案:

答案 0 :(得分:19)

不是将当前日期转换为字符串然后再转换int并进行比较,而是将参数日期字符串转换为DateTime对象,然后比较如下:

var parameterDate = DateTime.ParseExact("03/26/2015", "MM/dd/yyyy", CultureInfo.InvariantCulture);
var todaysDate = DateTime.Today;

if(parameterDate < todaysDate)
{
}

您可以将您的方法设为:

public static bool IsDateBeforeOrToday(string input)
{
    DateTime pDate;
    if(!DateTime.TryParseExact(input, "MM/dd/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out pDate))
    {
        //Invalid date
        //log , show error
        return false;
    }
    return DateTime.Today <= pDate;
}
  • 如果您想避免异常,请使用DateTime.TryParseExact 解析。
  • 如果您只想比较日期并忽略,请使用DateTime.Today 时间部分。

答案 1 :(得分:3)

您可以使用TryParse TryParseExact返回bool,无论解析是否成功。

在我的第一个实现中,我抛出了异常,但它没用,因为如果失败,ParseParseExact将自动抛出它。所以有两种选择:

  • 只需使用Parse并抓住Main()中的例外情况;

  • 如果输入错误,请使用TryParse并在IsDateBeforeOrToday()中执行有用的操作。

实现:

class Program
{
    public static bool IsDateBeforeOrToday(string input)
    {
        DateTime inputTime;
        var parseResult = DateTime.TryParse(input, inputTime);
        if (!parseResult)
            //Do something useful if parse failed.
        return inputTime <= DateTime.Now
    }

    static void Main(string[] args)
    {
        Console.WriteLine(IsDateBeforeOrToday("03/26/2015"));
        Console.ReadKey();
    }
}

答案 2 :(得分:1)

您可以使用DateTime.Compare方法。你可以这样做:

DateTime dTCurrent = DateTime.Now;
DateTime inputDate = DateTime.ParseExact(input, "MM/dd/yyyy", CultureInfo.InvariantCulture);

int result = DateTime.Compare(dTCurrent, inputDate);

int'结果'表示dTCurrent是否小于inputDate(小于0),与(0)相同还是大于(大于0)。

答案 3 :(得分:0)

您可以使用DateTime.Compare()如果Result小于该值,则表示第一个日期小于第二个日期,0等于和更大。

DateTime dileverydate = Convert.ToDateTime(dileveryDate.Text);
var todaysDate = DateTime.Today;
int result = DateTime.Compare(dileverydate, todaysDate);