为什么这行代码有时会抛出System.FormatException
?
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy", CultureInfo.InvariantCulture);
答案 0 :(得分:7)
因为您的字符串和格式不匹配。
将指定的日期和时间字符串表示形式转换为它 DateTime等效使用指定的格式和特定于文化 格式信息。 字符串表示的格式必须匹配 完全符合指定的格式。
改为使用dd.MM.yyyy
格式。
DateTime d = DateTime.ParseExact("01.07.2014",
"dd.MM.yyyy",
CultureInfo.InvariantCulture);
这里有 demonstration
。
请记住,"/"
custom format specifier在自定义日期和时间格式中具有特殊含义。它意味着; 将我替换为当前的文化日期分隔符。
在你的个人资料中,它说你来自阿塞拜疆。这意味着您的CurrentCulture
可能是az-Cyrl-AZ
(西里尔文,阿塞拜疆)或az-Latn-AZ
(拉丁文,阿塞拜疆)。
实际上,在这个案例中使用哪种文化并不重要,因为这两种文化都有.
作为DateSeparator
property。
这意味着您的原始代码也适用于您的CurrentCulture
。
DateTime d = DateTime.ParseExact("01.07.2014",
"dd/MM/yyyy",
CultureInfo.CurrentCulture);
// or you can use null
有关详细信息,请查看;
答案 1 :(得分:3)
您需要"."
为DateSeparator
的文化,例如:
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy",
CultureInfo.GetCultureInfo("az-Cyrl-AZ"));
如果你在阿塞拜疆并使用阿塞拜疆语和西里尔文字。
您可以使用:
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy",
null);
只是采取当前的文化。
也许您只需要"d"
而不是详细"dd/MM/yyyy"
,因为阿塞拜疆的标准短日期格式就像"01.07.2014"
。
“不变文化”使用"/"
作为其DateSeparator
,因此您不应该在您的情况下使用它。
此外,这也有效:
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy",
new DateTimeFormatInfo { DateSeparator = ".", }
);
因为new DateTimeFormatInfo()
创建了一个读/写“不变文化”日期/时间信息,您可以为其更改相关属性。
答案 2 :(得分:1)
日期格式中的/
将与您指定的区域性的日期分隔符匹配。如果您使用具有句点作为日期分隔符的区域性,则解析将起作用。
示例:
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy", CultureInfo.GetCultureInfo("de"));
您还可以使用文字句点而不是日期分隔符特定,然后它可以使用不变文化:
DateTime d = DateTime.ParseExact("01.07.2014", "dd.MM.yyyy", CultureInfo.InvariantCulture);
答案 3 :(得分:0)
<强>问题:强>
您的日期分隔符为.
,而字符串格式为/
<强>解决方案:强>
您的格式应为"dd.MM.yyyy"
或"MM.dd.yyyy"
,因为您的日期为"01.07.2014"
。 01
和07
同时存在日期和月份。
此日期可以是01st July 2014
或07 Jan 2014
。
您的代码应为
DateTime d = DateTime.ParseExact("01.07.2014",
"dd.MM.yyyy",
CultureInfo.InvariantCulture);
OR
DateTime d = DateTime.ParseExact("01.07.2014",
"MM.dd.yyyy",
CultureInfo.InvariantCulture);
答案 4 :(得分:0)
您所拥有的格式与提供的字符串不同:
尝试以下任一方法,它将起作用:)
DateTime d1 = DateTime.ParseExact("01/07/2014", "dd/MM/yyyy", CultureInfo.InvariantCulture);
DateTime d2 = DateTime.ParseExact("01.07.2014", "dd.MM.yyyy", CultureInfo.InvariantCulture);