【记录】C#中尝试用DateTime.TryParse去解析特定日期时间的格式:"Wed, 11-Sep-43 05:54:19 GMT"

【背景】

折腾:

【记录】研究模拟登陆百度的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,那肯定都是无法解析为正确的日期的;



发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量