为什么我的代码抛出String未被识别为有效的DateTime错误?

时间:2014-12-22 07:57:37

标签: c# string datetime

为什么我的代码会抛出此错误

  

字符串未被识别为有效的DateTime。

代码:

public static DateTime ToDate(this object obj)
{
    return Convert.ToDateTime(obj);
}

obj22/12/2014

2 个答案:

答案 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;
}