为什么我的代码会抛出此错误
字符串未被识别为有效的DateTime。
代码:
public static DateTime ToDate(this object obj)
{
return Convert.ToDateTime(obj);
}
obj
是22/12/2014
答案 0 :(得分:3)
那是因为您的日期格式与系统日期不同
您应该使用ParseExact
转换日期时间
public static DateTime ToDate(this object obj)
{
string dateString = Convert.ToString(obj);
string format = "dd/MM/yyyy";
return DateTime.ParseExact(dateString, format,
CultureInfo.InvariantCulture);
}
如果您的obj
日期ID不同,则需要更改format
答案 1 :(得分:2)
Convert.ToDateTime
默认使用CurrentCulture
。
这意味着,您的CurrentCulture
没有dd/MM/yyyy
(当前CurrentCulture
DateSeparator
当然不是/
)作为标准日期,时间格式。
除此之外,您可以使用具有特定文化的DateTime.TryParseExact
自定义日期和时间解析(例如:InvariantCulture
);
string s = "22/12/2014";
DateTime dt;
if(DateTime.TryParseExact(s, "dd/MM/yyyy", CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
{
Console.WriteLine(dt);
}
请记住,"/"
format specifier具有特殊含义,因为将我替换为当前文化或提供的文化日期分隔符。
根据您的方法,最好返回DateTime?
以在if语句之外返回null
;
public static DateTime? ToDate(this object obj)
{
DateTime dt;
if (DateTime.TryParseExact(obj.ToString(), "dd/MM/yyyy",
CultureInfo.InvariantCulture,
DateTimeStyles.None, out dt))
{
return dt;
}
return null;
}