解析时,字符串未被识别为有效的DateTime

时间:2013-02-13 09:21:00

标签: c# asp.net string datetime cultureinfo

转换为DateTime时出现以下异常:

String was not recognized as a valid DateTime.

lbl_RequestDate.Text = "13/2/2013";

CultureInfo provider = CultureInfo.CurrentCulture;
string[] format = provider.DateTimeFormat.GetAllDateTimePatterns();
Follow.RequestDate = DateTime.ParseExact(lbl_RequestDate.Text, format, provider, DateTimeStyles.None);

4 个答案:

答案 0 :(得分:4)

您可以使用格式d/M/yyyy,注意本月使用的单个M

Follow.RequestDate = DateTime.ParseExact(lbl_RequestDate.Text, "d/M/yyyy", provider, DateTimeStyles.None);

方法:provider.DateTimeFormat.GetAllDateTimePatterns()返回近155种格式,但其中没有(来自您当前的文化)支持格式d/M/yyyy这就是您获得异常的原因。如果您的日期的月份为13/02/2013,那么该方法返回的格式将起作用,因为格式数组中的格式最接近dd/MM/yyyy

答案 1 :(得分:2)

也许这会有所帮助:

DateTime.ParseExact("13/2/2013","d/M/yyyy",CultureInfo.GetCultureInfo("en-US"), DateTimeStyles.None );

通知:

d is for Day  (01 is also acceptable)
M is for Month (11 is also acceptable) 

答案 2 :(得分:1)

试试这样:

Follow.RequestDate = DateTime.ParseExact(lbl_RequestDate.Text, "d/M/yyyy", CultureInfo.InvariantCulture);

答案 3 :(得分:1)

DateTimeFormatInfo.GetAllDateTimePatterns()方法在我的计算机上返回tr-TR文化)29格式,但这些格式都不支持d/M/yyyy日期格式,这就是您获得FormatException的原因。

但在我的文化中DateSeparator.所以我不能完全使用CultureInfo.CurrentCulture来解决这个问题,但是当我使用埃及 cultureinfo(在你的个人资料中写的)CultureInfo.GetCultureInfo("ar-EG")这段代码没有任何错误;

CultureInfo provider = CultureInfo.GetCultureInfo("ar-EG");
string[] format = provider.DateTimeFormat.GetAllDateTimePatterns();
DateTime d = DateTime.ParseExact("13/02/2013", format, provider, DateTimeStyles.None);

不幸您的所有日期时间模式不支持d/M/yyyy格式。

enter image description here

不幸,将此字符串更改为13/02/2013并不能解决此问题,因为正如我之前所说,我的所有格式(tr-TR文化中)都没有也不支持dd/MM/yyyy格式。

我的拙见是这里,列出你所有的日期时间模式,并手动检查你的字符串是否是这个日期时间模式的识别格式,如;

string[] format = provider.DateTimeFormat.GetAllDateTimePatterns();
foreach (var f in format)
{
    ///
}

enter image description here