【背景】
折腾:
【记录】研究模拟登陆百度的C#代码为何在.NET 4.0中不工作
期间,需要在C#中,用DateTime.TryParse去解析特定日期时间的格式,比如:
"Wed, 11-Sep-43 05:54:19 GMT" |
结果出错。
所以想办法,要解析成功。
【折腾过程】
1.参考:
Check if a string is a valid date using DateTime.TryParse
去试试:
DateTime.TryParseExact Method (String, String, IFormatProvider, DateTimeStyles, DateTime)
2.去试试代码。
3.其中关于日期时间的格式化字符串,可以参考:
Standard Date and Time Format Strings
和:
Custom Date and Time Format Strings
的语法。
3.经过折腾:
datetimeStr = "11-Sep-43 05:54:19"; parseDatetimeOk = DateTime.TryParse(datetimeStr, out expireDatetime);
可以解析,但是解析出来的是1943年的,且是周六Saturday
而另外去看了看万年历,结果2043年的9月11的话,是周五Friday
所以:
此处的值:
Wed, 11-Sep-43 05:34:24 GMT
本身就是错的,应该是:
Sat, 11-Sep-43 05:34:24 GMT
或者是:
Fri, 11-Sep-43 05:34:24 GMT
4.然后发现,Sat是可以解析的:
datetimeStr = "Sat, 11-Sep-43 05:34:24 GMT"; parseDatetimeOk = DateTime.TryParse(datetimeStr, out expireDatetime);
而Fri是解析不了的。
对应的2043年的Fri,是可以解析的:
datetimeStr = "Fri, 11-Sep-2043 05:34:24 GMT"; parseDatetimeOk = DateTime.TryParse(datetimeStr, out expireDatetime);
所以此处结论是:
【总结】
你妹的!!!百度是个极度坑爹的货!!!!
百度返回的http的response的header中的Set-Cookie中的cookie名为BAIDUID的expires的值:
Wed, 11-Sep-43 05:19:08 GMT
本身就是错误的。
- 如果改为
- Sat, 11-Sep-43 05:34:24 GMT
- 或:
- Sat, 11-Sep-1943 05:34:24 GMT
- 都可以解析为1943年的对应的时间的
- 如果改为
- Fri, 11-Sep-2043 05:34:24 GMT
- 可以解析为2043年的对应的时间的
最终结论:
1.DateTime.TryParse,已经足够好用,可以继续,正常的日期了 -> 一般情况下,绝大多数情况下,都可以不用那个更复杂的DateTime.TryParseExact,就用DateTime.TryParse就足够了;
2.但是像百度这种坑爹的货,给你错误的日期的字符串,不论是DateTime.TryParse还是DateTime.TryParseExact,那肯定都是无法解析为正确的日期的;
转载请注明:在路上 » 【记录】C#中尝试用DateTime.TryParse去解析特定日期时间的格式:"Wed, 11-Sep-43 05:54:19 GMT"