DateTimeOffset.TryParseExact解析含非英文字符时间失败排查
问题根源与解决方案
首先得明确:你这里的核心误区是把希伯来语书写的公历月份和希伯来历(犹太历)的月份搞混了。
你输入里的מאי是希伯来语拼写的公历五月(对应英语May),属于格里高利历的月份名称,但你手动设置了HebrewCalendar()——这个日历是希伯来历的系统,它的月份是Nisan、Iyar这类和公历完全不相关的名称,所以不管你设不设置这个日历,解析都会失败,因为根本不匹配。
另外你的格式字符串也有两处问题:
- 输入里的月份是名称缩写,不是数字,应该用
MMM而不是MM - 输入末尾的时区偏移
+03:00也没在格式字符串里体现,需要加上zzz
修正后的代码
string str = @"30-מאי-18 14:18:15 +03:00"; DateTimeOffset res; // 直接用he-IL文化的默认配置,它默认用格里高利历,已经包含希伯来语的公历月份名称 CultureInfo culture = new CultureInfo("he-IL"); if (DateTimeOffset.TryParseExact(str, "dd-MMM-yy HH:mm:ss zzz", culture, DateTimeStyles.None, out res)) { // 解析成功,这里写你的处理逻辑 Console.WriteLine(res); }
补充说明
he-IL文化的DateTimeFormat默认就适配希伯来语的公历月份,包括缩写形式מאי,所以完全不需要切换到HebrewCalendar- 如果你非要用
HebrewCalendar,那你的输入日期必须是希伯来历的日期(比如对应希伯来历的月份名称),但显然你的输入是公历日期,所以完全不适用
内容的提问来源于stack exchange,提问作者styx
相关产品推荐
相关产品推荐

