似乎IndyGMTToLocalDateTime
在解码日期时不会忽略注释:
TDateTime dtDate1 = GMTToLocalDateTime("12 Mar 2015 14:03:21 -0000");
TDateTime dtDate2 = GMTToLocalDateTime("Thu, 12 Mar 2015 14:03:20 +0000 (GMT)");
TDateTime dtDate3 = GMTToLocalDateTime("Thu, 12 Mar 2015 14:03:20 +0000 (envelope-from <[email protected]>)");
TDateTime dtDate4 = GMTToLocalDateTime("Thu, 12 Mar 2015 14:03:20 +0000 ([email protected])");
UnicodeString Dt1 = DateTimeToStr(dtDate1);
UnicodeString Dt2 = DateTimeToStr(dtDate2);
UnicodeString Dt3 = DateTimeToStr(dtDate3);
UnicodeString Dt4 = DateTimeToStr(dtDate4);
前2个被正确解码。最后2个不是。括号中的部分应该被忽略,因为它只是注释,但似乎不是。
这是Indy中的错误吗?另外-是否有Indy的错误跟踪器(论坛似乎已关闭)?
GMTToLocalDateTime()
(更具体地讲,RawStrInternetToDateTime()
)并不意味着接受或寻找嵌入的注释。注释不属于输入内容,必须事先删除。嵌入式注释是电子邮件的功能,但是在处理数据时将被忽略(请参阅RFC 822第3.4.3节)。
在这种情况下,调用者未删除注释,并且当检查时间戳的存在以及在小时之间是否使用或用作分隔符时,'.'
最后两个示例的注释中字符的存在被抛出。/分钟/秒。RawStrInternetToDateTime()
':'
'.'
整个Indy都无法识别,更不用说处理标头中的嵌入式注释。但是,在这种情况下,我做了一些细微的调整,以RawStrInternetToDateTime()
使注释不会再使时间戳解析变得混乱(尽管在解析之前,剥离注释是真正的调用者的责任)。
是的,Indy有一些错误跟踪器:
http://code.google.com/p/indyproject
(尽管Google Code已关闭,所以该代码最终将消失)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句