检查Datetime是否具有特殊字符的更好方法

时间:2015-06-30 15:54:00

标签: c# datetime

我的get方法中的一个参数是如下的日期时间:

 http://localhost/accounts/?name=Junetest&uid=00000002&datetimechange=2015-04-12 15:14:20-0500

在我的控制器中,我转换日期时间即。

 if (row["datetimechange"] != null){
     var dtNewValue = Convert.ToDateTime(row["datetimechange"].ToString());
    }

如果传递的值正确,则此方法有效。但是,如果我添加一些特殊字符

 http://localhost/accounts/?name=Junetest&uid=00000002&datetimechange=2015-      04-12 15:14:20-0500asfdsfsdfds

转换仍然不会抛出任何异常,只有在实际的get操作期间才会失败。

有没有办法检查日期时间是否没有特殊字符或额外字符,然后在转换期间而不是转换后抛出异常。

我想过使用正则表达式或tryParse。我在想什么? PLS。让我知道是否有更清洁的方法来处理这个

2 个答案:

答案 0 :(得分:0)

最好尝试使用正则表达式进行过滤

if (row["datetimechange"] != null){
string temp=Convert.ToDateTime(row["datetimechange"].ToString());
MatchCollection mc1 = Regex.Matches(temp, @"[^a-zA-Z]");
foreach (Match m in mc)
                dtNewValue=dtNewValue+m.Value.ToString()
}

您可以添加更多过滤以抛出异常。

答案 1 :(得分:0)

您应该使用DateTime.TryParseExact

使用指定的格式数组,特定于文化的格式信息和样式,将指定的日期和时间字符串表示形式转换为其DateTime等效形式。字符串表示的格式必须至少与指定格式中的一个完全匹配。该方法返回一个值,指示转换是否成功。

当此方法返回时,如果转换成功,则包含等效于s中包含的日期和时间的DateTime值;如果转换失败,则包含MinValue。如果s或格式为null,s或格式元素为空字符串,或者s的格式与格式中至少一种格式模式不完全一致,则转换失败。

var x = DateTime.TryParseExact(dateString, formats, new CultureInfo("en-US"), DateTimeStyles.None, out dateValue);