2013-02-13 66 views
2

转换为DateTime时,我得到以下异常:字符串未被识别为有效的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); 
+0

什么是Follow.RequestDate的类型?你运行哪种文化? MM/DD/YYYY是否有效? – Jocke 2013-02-13 09:29:42

+0

什么是'CurrentCulture'('provider')?在某些文化中,日期分隔符字符串不同于'“/”'。 – 2013-02-13 09:43:00

回答

4

您可以使用thje格式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

+0

你:他们中没有一个支持'd/M/yyyy'_的格式,那么这很大程度上取决于提供者。例如'en-SG'(英语(新加坡)),'pt-BR'(葡萄牙语(巴西)),'el-GR'(希腊语(希腊语))以及其他许多人都支持''d/M/YYYY“'。 – 2013-02-13 10:11:41

+0

@JeppeStigNielsen,哦,太棒了,不知道,谢谢 – Habib 2013-02-13 10:14:34

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) 
+0

我会很高兴知道为什么这downvote。虽然它是正确的。 – 2013-02-13 09:28:41

+0

也许是因为你直接写入“13/2/2013”​​到方法中? 我不知道,这是对的。 +1 – jAC 2013-02-13 09:31:21

+0

为什么要使用'en-US'文化?仅仅因为它碰巧与问题中提供的日期格式相匹配?对我来说,其他答案是优越的。 – 2013-02-13 09:31:27

1

试试这样说:

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

大多数情况下,当你想要单个'M'时,你也需要单个'd',所以:''d/M/yyyy'''。 – 2013-02-13 09:44:21

+0

@JeppeStigNielsen好了,谢谢。 – 2013-02-13 09:48:06

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

+1

当提供者是'tr-TR'文化时,'DateSeparator'字符串是'“。”'。因此,格式字符串中的任何非转义斜杠(如“d/M/yyyy”中的斜杠)都会转换为句点。所以这应该解析:'DateTime.ParseExact(“13.2.2013”​​,“d/M/yyyy”,新的CultureInfo(“tr-TR”));' – 2013-02-13 09:48:55

+0

@JeppeStigNielsen你是对的。我错过了。将更新答案。 – 2013-02-13 09:51:38

相关问题