2015-03-14 30 views
2

Кажется, что Инди GMTToLocalDateTime не игнорировать комментарии при декодировании даты:Indy10 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 <[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 ошибка-трекер (по-видимому, форумы опущены)?

+0

Где вы получили информацию о том, что внутри этих скобок может быть * игнорировали комментарий *? (это напоминает мне ['this announce'] (http://xkcd.com/1179/) :) – TLama

+1

Встроенные комментарии разрешены в заголовках электронной почты (см. RFC 822, раздел 3.4.3), но при обработке должны быть проигнорированы данные заголовка. Таким образом, в этой ситуации ответственность за удаление комментариев была передана вызывающим абонентом перед передачей данных в 'GMTToLocalDateTime()'. –

ответ

4

GMTToLocalDateTime() (более конкретно, RawStrInternetToDateTime()) не предназначен для принятия или поиска встроенных комментариев. Комментарии не входят во входные данные и должны быть удалены заранее. Встроенные комментарии - это функция электронной почты, но их следует игнорировать при обработке данных (см. RFC 822, раздел 3.4.3).

В этой ситуации, комментарии не были лишены вызывающим, и присутствие '.' характера в комментариях 2 последних примеров сбросив RawStrInternetToDateTime(), когда он проверяет на наличие метки времени и использует ли ':' или '.' в качестве разделителя между часами/минутами/секундами.

Indy в целом не предназначен для распознавания, а тем более для обработки встроенных комментариев в заголовках. Однако в этой ситуации я сделал небольшую настройку до RawStrInternetToDateTime(), поэтому комментарии больше не будут путать синтаксический анализ timestamp (хотя на самом деле ответственность вызывающего абонента заключается в том, чтобы отделять комментарии до разбора).

И да, есть трекеры ошибка для Инди:

http://code.google.com/p/indyproject
(хотя Google Code is shutting down, так что это один уйдет в конце концов).

http://indy.codeplex.com

 Смежные вопросы

  • Нет связанных вопросов^_^