我需要确定用户输入的日期是否小于或等于今天的日期。
我有以下代码将日期转换为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();
}
}
答案 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
,无论解析是否成功。
在我的第一个实现中,我抛出了异常,但它没用,因为如果失败,Parse
或ParseExact
将自动抛出它。所以有两种选择:
只需使用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);