C# DateTime.ParseExact抛出System.FormatException
为什么这行代码有时会抛出C# DateTime.ParseExact抛出System.FormatException,c#,datetime,C#,Datetime,为什么这行代码有时会抛出System.FormatException DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy", CultureInfo.InvariantCulture); 因为您的字符串和格式不匹配 来自 将日期和时间的指定字符串表示形式转换为其 使用指定格式和特定区域性的DateTime等效项 格式信息字符串表示形式的格式必须匹配 指定的格式完全相同。 改用dd.MM.yyyy格式 DateTime d = D
System.FormatException
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy", CultureInfo.InvariantCulture);
因为您的字符串和格式不匹配 来自 将日期和时间的指定字符串表示形式转换为其 使用指定格式和特定区域性的DateTime等效项 格式信息字符串表示形式的格式必须匹配 指定的格式完全相同。 改用
dd.MM.yyyy
格式
DateTime d = DateTime.ParseExact("01.07.2014",
"dd.MM.yyyy",
CultureInfo.InvariantCulture);
这里有一个
记住,在自定义日期和时间格式中具有特殊含义。它的意思是:;用当前区域性日期分隔符替换我
在你的个人资料中,它说你来自阿塞拜疆。这意味着你可能是az-Cyrl-az
(西里尔语,阿塞拜疆)或az-Latn-az
(拉丁语,阿塞拜疆)
实际上,在本例中使用哪种文化并不重要,因为这两种文化都有
作为一个整体
这意味着您的原始代码也适用于您的CurrentCulture
DateTime d = DateTime.ParseExact("01.07.2014",
"dd/MM/yyyy",
CultureInfo.CurrentCulture);
// or you can use null
有关更多信息,请查看
- 问题:
日期中的分隔符是
,而字符串格式中的分隔符是/
解决方案:
您的格式应该是
“dd.MM.yyyy”
或“MM.dd.yyyy”
,因为您的日期是“01.07.2014”
<代码>01和07
同时作为日期和月份存在
该日期可以是2014年7月1日
或2014年1月7日
你的代码应该是
DateTime d = DateTime.ParseExact("01.07.2014",
"dd.MM.yyyy",
CultureInfo.InvariantCulture);
或
日期格式中的
/
将与您指定的区域性的日期分隔符匹配。如果使用以句点作为日期分隔符的区域性,则解析将起作用
例如:
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);
参考:您的格式与提供的字符串不同: 请尝试以下任一项,它将起作用:)
您需要一个区域性,其中
“
是日期分隔符,例如:
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”
“不变区域性”使用“/”
作为其日期分隔符,因此您不应该在您的案例中使用它
此外,这项工作:
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy",
new DateTimeFormatInfo { DateSeparator = ".", }
);
因为new DateTimeFormatInfo()
生成一个读/写“不变区域性”日期/时间信息,您可以为其更改相关属性。包含“/”的内容与包含“.”的内容如何匹配?你试过什么吗?有时候这段代码不会抛出任何异常。阅读下面的一些答案。谢谢。“az Latn az”-这一个更有用,因为我们现在使用拉丁语。@gdrt94很棒。两者都有相同的日期分隔符
:“
如果已知您的应用程序总是使用“az Latn az”
,您只需键入null
。如果当前文化存在任何风险,请写出new CultureInfo(“az Latn az”)
@gdrt事实上,我刚刚将new CultureInfo(“az Cyrl az”)
更改为CultureInfo.GetCultureInfo(“az Cyrl az”)
,原因有二:(1)您没有每次创建CultureInfo
的新实例(使用后立即成为垃圾)但从缓存中选取实例。(2)您得到一个UseUserOverride
设置为False的实例,这样对日期分隔符有另一偏好的用户(在其计算机的Windows中更改了设置)就不会破坏您的代码。
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy",
null);
DateTime d = DateTime.ParseExact("01.07.2014", "dd/MM/yyyy",
new DateTimeFormatInfo { DateSeparator = ".", }
);