将字符串转换为DateTime时,字符串未被识别为有效的DateTime

时间:2014-08-20 07:24:59

标签: c# asp.net string datetime

问题

我正在尝试以String格式转换DateTime并再次将DateTime转换为String

案例#1

string time = "20120718 00:56:03";
DateTime theTime =DateTime.ParseExact(time,"MM-dd-yyyy HH:mm:ss",CultureInfo.InvariantCulture,DateTimeStyles.None);
string convertedTime = theTime.ToString("MM-dd-yyyy HH:mm:ss");

案例#2

string time = "20120718 00:56:03";
string CallDate_DBFormat = Convert.ToDateTime(time).ToString("MM-dd-yyyy HH:mm:ss");
DateTime CallTime = Convert.ToDateTime(CallDate_DBFormat);
string convertedTime = CallTime.ToString("MM-dd-yyyy HH:mm:ss");

在这两种情况下,我都会得到例外

  

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

3 个答案:

答案 0 :(得分:3)

来自documentation of DateTime.ParseExact method;

  

将指定的日期和时间字符串表示形式转换为它   DateTime等效使用指定的格式和特定​​于文化   格式信息。 字符串表示的格式必须匹配   完全符合指定的格式。

在你的情况#1中,他们不是。请改用yyyyMMdd HH:mm:ss格式。

string time = "20120718 00:56:03";
DateTime theTime = DateTime.ParseExact(time,"yyyyMMdd HH:mm:ss",
                                       CultureInfo.InvariantCulture,
                                       DateTimeStyles.None);
string convertedTime = theTime.ToString("MM-dd-yyyy HH:mm:ss");

对于案例#2,我们需要知道您的CurrentCulture属性。为什么呢?

因为此方法使用DateTime.Parse方法CurrentCulture。这是怎样的implemented;

public static DateTime ToDateTime(String value)
{
     if (value == null)
         return new DateTime(0);
     return DateTime.Parse(value, CultureInfo.CurrentCulture);
}

可能yyyyMMdd HH:mm:ss格式不是CurrentCulture的标准日期和时间格式,这就是此方法抛出FormatException的原因。

答案 1 :(得分:1)

这样做。您已设置无效格式以将字符串解析为DateTime查看您的DateTime字符串格式。

string time = "20120718 00:56:03";
DateTime theTime =DateTime.ParseExact(time,"yyyyMMdd HH:mm:ss",CultureInfo.InvariantCulture,DateTimeStyles.None);
string convertedTime = theTime.ToString("MM-dd-yyyy HH:mm:ss");

答案 2 :(得分:0)

使用此:

 string time = "20120718 00:56:03";
        DateTime theTime = DateTime.ParseExact(time, "yyyyMMdd HH:mm:ss", CultureInfo.InvariantCulture, DateTimeStyles.None);
        string convertedTime = theTime.ToString("yyyy-dd-MM HH:mm:ss");