c#中的字符串到日期的转换

本文关键字:日期 转换 字符串 | 更新日期: 2023-09-27 17:59:05

我有一个字符串"13/6/2011"。我必须将其转换为DateTime。为此,我使用

 DateTime.ParseExact("13/6/2011","DD/MM/YYYY",null);

但它显示

 String was not recognized as a valid DateTime

例外。知道为什么吗?

c#中的字符串到日期的转换

除了ChrisF提到的"6"与"06"问题外,您的格式字符串也不正确。月份的日期是"dd",年份是"yyyy",所以您应该有一个"dd/MM/yyyy"的格式。

此外,我建议显式传递CultureInfo.InvariantCulture,否则"/"可能会被视为不同的(特定于区域性的)日期分隔符。(另一种选择是引用斜杠,但我认为使用不变的文化会更加固定。)

换句话说,我会使用这样的东西:

// Sample for text: 13/06/2011
DateTime date = DateTime.ParseExact(text, "dd/MM/yyyy",
                                    CultureInfo.InvariantCulture);

如果不一定有两位数的日期或月份,请使用:

DateTime date = DateTime.ParseExact(text, "d/M/yyyy",
                                    CultureInfo.InvariantCulture);

我还不清楚是否也能处理(比如)2011年6月13日。

您的月份格式是MM,但您只为月份指定了一个位数。

如果您输入06,它应该有效,或者如果您使用M格式说明符表示月份,它将使用一个数字。

此外(正如Jon Skeet所提到的),您使用了DDYYYY,而不是dd(或d来处理个位数的天数)和yyyy

有关各种日期-时间格式说明符的完整列表,请参阅此MSDN页面。

您可能想要使用不同格式的字符串:

DateTime.ParseExact("13/6/2011","dd/MM/yyyy",null);

或者您可以使用d,它是MSDN上定义的"短日期格式"。

DateTime.ParseExact("13/6/2011","d",null);
DateTime dt=  DateTime.ParseExact("13/06/2011","dd/MM/yyyy",null);
DateTime.ParseExact("13/6/2011","DD/M/YYYY",null);