给出System.FormatException:String未被识别为有效的DateTime。在C#中使用datetime.ParseExact

时间:2011-02-16 06:46:42

标签: c# .net datetime formatexception

我在c#中的代码下面,我将字符串类型格式的日期转换为datetime,但是给出了错误。

if (!string.IsNullOrEmpty(SessionDictionary.GetValue("UserDetails", "ExpiryDate")))
{
    DateTime ExpiryDate = DateTime.ParseExact(SessionDictionary.GetValue("UserDetails", "ExpiryDate"), "dd mmm yy", null);                      
    strDate = sitedata.FormatDate(ExpiryDate, TridionDateFormat.ShortDate);
}
else
{
    strDate = "-";
}

我的SessionDictionary.GetValue("UserDetails", "ExpiryDate")是字符串类型数据,返回“31/01/2011 00:00:00”格式的日期,在上面的代码中我使用DateTime.ParseExact它给了我{{1}错误。

请说明出了什么问题。

感谢。

4 个答案:

答案 0 :(得分:5)

您描述的样本日期(31/01/2011 00:00:00)看起来像格式dd / MM / YYYY HH:mm:ss,那你为什么要使用dd mmm yyyy?

尝试

DateTime.ParseExact(..., "dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture);

注意使用HH(24小时制)而不是hh(12小时制),以及使用InvariantCulture,因为有些文化使用斜杠以外的分隔符。

例如,如果文化是de-DE,格式“dd / MM / yyyy”会将期间视为分隔符(31.01.2011)。

答案 1 :(得分:1)

可能是因为 mmm (没有这样的月份格式),请尝试 MMM 。(看起来像2月/ 1月等)

答案 2 :(得分:1)

您使用错误的格式来解析日期。正确的是:

DateTime ExpiryDate = DateTime.ParseExact(SessionDictionary.GetValue("UserDetails", "ExpiryDate"), "dd/MM/yyyy hh:mm:ss", null)

此外,如果您的系统日期格式设置为dd/MM/yyyy,您只需使用:

DateTime ExpiryDate = DateTime.ParseExact(SessionDictionary.GetValue("UserDetails", "ExpiryDate"), "G", null)

答案 3 :(得分:0)

尝试 DateTime ExpiryDate = DateTime.ParseExact(SessionDictionary.GetValue("UserDetails", "ExpiryDate"), "g", null);

或点击此处:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx