DateTime.ParseExact()引发异常

时间:2014-04-02 12:31:54

标签: c# datetime

DateTime.ParseExact()提升并且错误消息是

日历System.Globalization.GregorianCalendar中不支持字符串表示的DateTime。

这种方式我试图解析日期

 string strDate ="03/17/2014"
 DateTime dt= DateTime.ParseExact(strDate, "dd/MM/yyyy", CultureInfo.InvariantCulture)

所以上面的日期是正确的日期然后我收到错误的原因。当应用程序在任何国家运行时,解析日期的最佳方法是什么,系统pc日期时间设置可以是任何东西。请指导我。

我改变datetime parseexact to only parse喜欢

的那一刻
 string strDate ="03/17/2014"
 DateTime dt= DateTime.Parse(strDate)

上面的代码工作正常。所以告诉我ParseExact()中的问题是什么 感谢

3 个答案:

答案 0 :(得分:6)

month之前的day "03/17/2014""MM/dd/yyyy"DateTime dt= DateTime.ParseExact(strDate, "MM/dd/yyyy", CultureInfo.InvariantCulture) ,你得到例外,因为月份不应该是17,它可能有1到12的值您可以详细了解自定义日期格式here

{{1}}

答案 1 :(得分:3)

没有17个月,请使用"MM/dd/yyyy"代替"dd/MM/yyyy"

DateTime dt= DateTime.ParseExact("03/17/2014", "MM/dd/yyyy", CultureInfo.InvariantCulture)

<强>更新

  

我们是否必须指定格式。我不想   指定格式然后如何使用它。基本上是pc在哪里   应用程序将在那里运行datetime设置可以是任何类似的   dd / mm / yy或mm / dd / yy等

如果它可以是任何东西你就有问题。什么月02/03/2012,2月或3月?您必须指定string[]个允许的格式。您可以通过数组中的顺序为其赋予优先级。然后,您可以使用带有DateTime.ParseExact的重载string[]

另一种方法是接受您不了解当前文化,但您知道该字符串是当前文化的有效格式,/为日期分隔符。然后,您可以克隆当前DateTimeFormat并更改DateSeparator

然后你甚至可以使用DateTime.Parse

var customDateTimeFormat = (DateTimeFormatInfo)DateTimeFormatInfo.CurrentInfo.Clone();
customDateTimeFormat.DateSeparator = "/";
DateTime dt = DateTime.Parse("17/03/2014", customDateTimeFormat);

即使我们使用.作为日期分隔符,这对我在德国也有用,我需要使用"17/03/2014"因为这一天来到这个月之前。

答案 2 :(得分:2)

来自The "MM" Custom Format Specifier

  

“MM”自定义格式说明符将月份表示为来自的数字    01到12(对于有13的日历,从1到13)   个月)

您应该使用MM/dd/yyyy

等月份说明符更改日期说明符