如何检查日期是否小于或等于今天的日期?
我需要确定用户输入的日期是否小于或等于今天的日期。
我有以下代码将日期转换为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(); } }
而不是将当前日期转换为字符串,然后是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; }
- 如果要在解析中避免exception,请使用
DateTime.TryParseExact
。 - 如果您只想比较日期并忽略时间部分,请使用
DateTime.Today
。
您可以使用TryParse
的TryParseExact
,它返回bool
,无论解析是否成功。
在我的第一个实现中,我抛出exception,但它没用,因为如果失败, Parse
或ParseExact
将自动抛出它。 所以有两种选择:
-
只需在
Main()
使用Parse
并捕获exception; -
如果输入错误,请使用
TryParse
并在IsDateBeforeOrToday()
执行一些有用的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(); } }
您可以使用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)。