我和Xamarin(主要是表格)合作,几天前我发现了这个问题。
当我调用web服务时,我会查看Date字段的响应标题并尝试解析它。
直到2月28日才能正常工作:
DateTime dt_OK = DateTime.Parse("Tue, 28 Feb 2017 11:07:06 GMT");
但是,从3月1日开始:
DateTime dt_KO = DateTime.Parse("Wed, 01 Mar 2017 11:07:06 GMT");
我得到:" String未被识别为有效的DateTime"。但它是一个有效的日期时间! 2017年3月1日是星期三......
好吧,我知道退出ParseExact(我尝试过并且工作过)但是.Parse()怎么样?DateTime dt_always_ok = DateTime.ParseExact(dateFromHeader, "ddd, dd MMM yyyy HH:mm:ss Z", System.Globalization.CultureInfo.InvariantCulture);
3月的所有日期都不会被识别和解析..它将从4月1日重新开始工作。
其他人是否面临这种行为?
答案 0 :(得分:3)
我认为Hans是正确的。看起来像你的" Mar"是{em>不在Parse
方法中解析为marzo的缩写月份名称,意大利语为3月。它尝试将其解析为martedi的缩写日名称,而不是意大利语的星期二。而且,由于您尝试在字符串中解析两个不同的缩写日名称,因此会出现异常。
但是,用意大利文化解析你的英文月份名称太奇怪了。使用基于英语的文化,而不是InvariantCulture
。如果您有自定义格式,则可能需要选择ParseExact
或TryParseExact
方法来防止出现这种模糊不清的情况。
答案 1 :(得分:0)
该问题似乎只适用于Mono mcs
编译器,而不适用于.Net
框架。
在这种情况下,它看起来像known 错误,因为偶数(!)
DateTime dt_KO = DateTime.Parse("01 Mar 2017",CultureInfo.GetCultureInfo("it-IT"));
产生以下错误
System.FormatException: Giorno della settimana non corretto. Stringa non riconosciuta come DateTime valido.
这意味着" 字符串未被识别为有效的DateTime,因为星期几不正确",而"Mar"
是正确的"MMM"
本月的格式。
看起来他们并不认为一个月和一天在当前的意大利语中可能有相同的缩写。
DateTime.Parse的可能解决方法是
DateTime dt_KO = DateTime.Parse("Wed, 01 Mar 2017 11:07:06 GMT",
CultureInfo.GetCultureInfo("en-US"));