字符串转换为datetime,与字符串格式无关

时间:2014-02-20 19:58:23

标签: c# asp.net datetime

我想将字符串转换为日期时间格式。 问题是字符串有不同的格式。 例如,在下面的代码中,strDate可以是“2/20/2014 1:41:57 PM”或“20/02/2014 13:44:56”。 Convert.ToDateTime(strDate)只针对一种格式(用户浏览器设置上的格式)执行良好,并为另一种格式生成错误。 如何将字符串成功转换为独立于字符串格式的日期时间? 感谢

DateTime dt = Convert.ToDateTime(strDate);

2 个答案:

答案 0 :(得分:2)

您可以使用DateTime.TryParseExactDatetime.ParseExact多种格式,例如:

string dateStr = "20/02/2014 1:41:57 PM";
string[] dateFormats = new[]
    {

        "d/M/yyyy h:mm:ss tt", 
        "M/d/yyyy h:mm:ss tt",
    };

DateTime dt;

if (DateTime.TryParseExact(dateStr,
                            dateFormats,
                            CultureInfo.InvariantCulture,
                            DateTimeStyles.None,
                            out dt))
{
    //valid dates for formats
}
else
{
    //invalid date
}

这种方法的问题在于它会使用10/02/2014 1:41:57 PM这样的字符串给你不一致的结果,上面的代码会将其解析为2014年2月10日,而不是October 2nd 2014,以避免这种情况你可以自定义您的客户端以特定格式返回日期,然后进行相应的解析。

答案 1 :(得分:0)

您想要DateTime.Parse()DateTime.TryParse()

DateTime dt;
if(DateTime.TryParse(stringDate, out dt)
{
    //successful datetime conversion
}

如果你知道字符串将是几种确切格式之一,你可以使用DateTime.TryParseExact()并传入每种格式的字符串数组(第二次重载)。