使用DateTime.TryParseExact解析德语日期返回false的问题
问题原因及解决办法
核心问题:德语星期缩写不匹配
在de-DE文化下,星期六的标准缩写是"Sa",而你输入字符串里的"Sam"不符合该文化的默认星期缩写规则,这是解析失败的根本原因。另外,字符串中的月份缩写"Mär"是符合de-DE文化的三月缩写,这部分没有问题。
解决方式
有两种可行的处理方案:
方案1:修正输入字符串的星期缩写
将输入里的"Sam"替换为符合标准的"Sa"后再解析:
string input = "Sam Mär 24 03:58:38 2024".Replace("Sam", "Sa"); DateTime result; bool success = DateTime.TryParseExact(input, "ddd MMM d HH:mm:ss yyyy", new CultureInfo("de-DE"), DateTimeStyles.None, out result);
方案2:自定义格式提供器兼容"Sam"缩写
如果无法修改输入字符串,可以克隆de-DE文化并自定义星期缩写映射:
var customDeCulture = (CultureInfo)new CultureInfo("de-DE").Clone(); customDeCulture.DateTimeFormat.AbbreviatedDayNames = new[] { "So", "Mo", "Di", "Mi", "Do", "Fr", "Sam" }; DateTime result; bool success = DateTime.TryParseExact("Sam Mär 24 03:58:38 2024", "ddd MMM d HH:mm:ss yyyy", customDeCulture, DateTimeStyles.None, out result);
额外提示
如果使用.NET Framework,需注意系统区域设置可能影响默认文化的格式,但上述两种方案不依赖系统环境,可靠性更高。
内容的提问来源于stack exchange,提问作者RiriB
相关产品推荐
相关产品推荐

