我正在尝试使用DateTime.Parse
以自定义格式解析包含DateTime
的字符串。
格式为yy-MMM MMMM-dddd-ddd-dd
,字符串为15-jan. január-szerda-Sze-07
。
我修改了操作系统区域设置中的ShortDatePattern
,您可以在调试时在CultureInfo.CurrentCulture
中看到它。
我正在使用以下代码:
var date = DateTime.Parse(dateInString, CultureInfo.CurrentCulture);
但它失败,异常String was not recognized as a valid DateTime.
使用ParseExact
可以工作。
var date = DateTime.ParseExact(
dateInString,
CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern,
CultureInfo.CurrentCulture);
Parse
不应该也能正常工作吗?
任何帮助都将不胜感激。
修改
假设Parse
不够好,这应该没问题,还是会引起我现在想不到的问题(它适用于上述问题)?
DateTime date = new DateTime();
bool success = false;
foreach (var format in currentCulture.DateTimeFormat.GetAllDateTimePatterns())
{
success = DateTime.TryParseExact(dateString, format, culture, DateTimeStyles.AllowWhiteSpaces, out date);
if (success)
break;
}
if (!success)
throw new Exception();
答案 0 :(得分:4)
我用你的例子玩了一点,我无法使它工作。我认为 DateTime.Parse 根本不够聪明,无法解析您的字符串,MSDN文档证实了这一点。以下是ParseExact文档中的一节,根据该文档, Parse 不应与自定义文化/模式一起使用,以及原因:
如果解析为自定义区域性生成的日期和时间字符串,请使用ParseExact方法而不是Parse方法来改进 解析操作成功的概率。自定义文化 日期和时间字符串可能很复杂,因此很难 解析。 Parse方法尝试用几个解析一个字符串 隐式解析模式,所有这些都可能失败。
这是来自SetAllDateTimePatterns文档的另一个有趣的片段:
在解析日期和时间的字符串表示时,Parse和TryParse方法不会完全迭代模式中的所有字符串。如果 你需要一个日期和时间字符串来具有特定的格式 在解析操作时,您应该将有效格式的数组传递给 DateTime.ParseExact ... 的