Indy10 GMTToLocalDateTime 问题

Indy10 GMTToLocalDateTime issue

似乎 Indy GMTToLocalDateTime 在解码日期时没有忽略注释:

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 <aaa@bbb.ccc>)");
TDateTime dtDate4 = GMTToLocalDateTime("Thu, 12 Mar 2015 14:03:20 +0000 (aaa@bbb.ccc)");

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()时间戳的存在以及它是否使用 ':''.' 作为 hour/minutes/seconds.

之间的分隔符

作为一个整体,Indy 的设计甚至无法识别,更不用说处理 headers 中嵌入的注释了。然而,在这种情况下,我对 RawStrInternetToDateTime() 做了一个小调整,这样评论就不会再混淆时间戳解析(尽管调用者有责任在解析之前删除评论)。

是的,Indy 有错误跟踪器:

http://code.google.com/p/indyproject
(虽然Google Code is shutting down,所以这个最终会消失)。

http://indy.codeplex.com