如何在日期自字符串和日期时间选择器之间进行筛选



我正在尝试按日期筛选内容。我有两个DateTimePicker,叫做FromDate和ToDate。我有一个数组,其中一个数组(str[10](中有一个日期,我尝试将字符串转换为日期时间格式,但仍然收到错误:

System.FormatException: 'String was not recognized as a valid DateTime.'

str[10]:中的字符串

str[10] = "9/22/2017 18:24";

我当前的代码:

string[] date = str[10].Split(' ');                            
DateTime dateSpec = DateTime.ParseExact(date[0], "MM/dd/yyyy", CultureInfo.CurrentCulture);
if (dateSpec >= FromDate.Value && dateSpec <= ToDate.Value) 
{ 
//Do Something
}

我不太确定该怎么办,因为大多数论坛或多或少都建议做同样的事情。我不确定错误在哪里。我检查了数组,字符串也没有任何空格,认为这可能是错误的原因

"MM/dd/yyyy"中的MM表示月份组件将填充一个0(如有必要(,使其长度为两位数。您的输入"9/22/2017"仅使用个位数的月份,因此与该格式不匹配。如果将格式更改为"M/dd/yyyy",则解析成功。

此外,您不需要自己截断时间部分;如果时间格式是一致的(HH:mm(,那么只需解析它并使用Date属性来获得当天午夜的DateTime。。。

DateTime dateSpec = DateTime.ParseExact(str[10], "M/dd/yyyy HH:mm", CultureInfo.CurrentCulture);
if (dateSpec.Date >= FromDate.Value && dateSpec.Date <= ToDate.Value) 
{ 
//Do Something
}

根据str的填充方式(例如用户输入(,还可以考虑使用DateTime.TryParseExact(),它在失败时返回false,而不是抛出FormatException。。。

if (DateTime.TryParseExact(str[10], "M/dd/yyyy HH:mm", CultureInfo.CurrentCulture, DateTimeStyles.None, out DateTime dateSpec))
{
// Handle parsing success
if (dateSpec.Date >= FromDate.Value && dateSpec.Date <= ToDate.Value) 
{ 
//Do Something
}
}
else
{
// Handle parsing failure
}

dateSpec在传递时被声明为out参数,这在C#7.0之后是可能的。

我在另一个平台上添加了另一个编码器建议的这段代码,从而使其正常工作

string[] formats = { "M/d/yyyy HH:mm", "M/dd/yyyy HH:mm", "MM/d/yyyy HH:mm", "MM/dd/yyyy HH:mm" };
DateTime dateSpec = DateTime.Now;
if (DateTime.TryParseExact(str[10].ToString(), formats, System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out dateSpec))
{
if (dateSpec.Date >= FromDate.Value.Date && dateSpec.Date <= ToDate.Value.Date)
{
//Do Something
}
}
else
{
MessageBox.Show("Error");
}

最新更新