Форум: "Начинающим";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];
ВнизПреобразование времени RFC822 в TDateTime Найти похожие ветки
← →
mfender © (2007-07-17 21:00) [0]Здравствуйте, Уважаемые!
Подскажите, пожалуйста, каким непостижимым образом лучше всего привести время RFC822 (например, Tue, 17 Jul 2007 16:30:00 +0400) к привычному и традиционному TDateTime?
Буду очень признателен за ответы, ибо всю голову уже сломал об клавиши... ))))
← →
Anatoly Podgoretsky © (2007-07-17 21:02) [1]> mfender (17.07.2007 21:00:00) [0]
Либо использовать какую ни будь библиотеку либо написать свою функцию, не велика задача, под силам начинающему. За пару часов с отладкой.
← →
mfender © (2007-07-17 21:08) [2]Я уже пытался использовать StrToDateTime, подменяя предварительно формат ShortTimeFormat - не плучилось. Пробовал XMLTimeToDateTime - видимо тоже не то... И Интернет молчит по этому поводу...
Тем не менее, работают же программы с этим временем (фидридеры всякие - точно)... Эх, видать придётся писать-таки парсер...
← →
Anatoly Podgoretsky © (2007-07-17 21:13) [3]> mfender (17.07.2007 21:08:02) [2]
Я же сказал не обязательно самому писать, возьми ICS и скопируй из него функцию.
← →
mfender © (2007-07-17 21:49) [4]Уже нарисовал такую вот беду:
unit mfXMLTimeToDateTime;
interface
uses SysUtils, DateUtils;
const Months: array[0..11] of PChar =
("Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Okt", "Nov", "Dec");
function mf_XMLTimeToDateTime(XMLTime: string): TDateTime;
function mf_GetNormalInt(Str: string): Integer;
function mf_GetMonth(Str: string): Integer;
implementation
function mf_XMLTimeToDateTime(XMLTime: string): TDateTime;
var Day, Month, Year, Hour, Minutes, Seconds: Integer;
begin
Day := mf_GetNormalInt(Copy(XMLTime, 6, 2));
Month := mf_GetMonth(Copy(XMLTime, 9, 3));
Year := mf_GetNormalInt(Copy(XMLTime, 13, 4));
Hour := mf_GetNormalInt(Copy(XMLTime, 18, 2));
Minutes := mf_GetNormalInt(Copy(XMLTime, 21, 2));
Seconds := mf_GetNormalInt(Copy(XMLTime, 24, 2));
Result := EncodeDateTime(Year, Month, Day, Hour, Minutes, Seconds, 0);
end;
function mf_GetNormalInt(Str: string): Integer;
begin
if Copy(Str, 1, 1) = "0" then Result := StrToInt(Copy(Str, 2, 1))
else Result := StrToInt(Str);
end;
function mf_GetMonth(Str: string): Integer;
var I: Integer;
begin
Result := 1;
for I := 1 to 12 do
begin
if Months[I - 1] = Str then Result := I;
end;
end;
end.
← →
Panel (2007-07-17 22:07) [5]не велика задача, под силам начинающему
Далеко не каждому.
Варианты:
- вместо +0400 стоит (MSK) // более-менее понятно, но нужны списки часовых поясов
- вместо +0400 стоит (ZKR) // и такое бывает... но не понятно, что?
- вместо + 0400 стоит +0390 // ну... бывает...
- вместо Tue, 17 Jul 2007 16:30:00 +0400 стоит 17 Jul 2007 16:30:00 +0400 // кому понятно, а кому - не очень... алгоритм должен быть гибким
- вместо Tue, 17 Jul 2007 16:30:00 +0400 стоит 2007 Jul 17 16:30:00 // то же самое, но еще запутаннее...
...и еще много-много-много разных прочих вариантов... а как заголовки спама посмотреть - так просто заглядение!..
← →
Anatoly Podgoretsky © (2007-07-17 22:13) [6]> Panel (17.07.2007 22:07:05) [5]
Вариантов много, но он то спрашивал про RFC822
← →
mfender © (2007-07-18 04:00) [7]
> и еще много-много-много разных прочих вариантов...
Вариантов нет. RFC822 очень точно всё описывает. А всё остальное - действительно нелепые варианты ))))
← →
sniknik © (2007-07-18 09:01) [8]> // более-менее понятно, но нужны списки часовых поясов
не нужны, все нужное в этой записи. время по гринвичу + сколько добавить чтобы получить локальное, с учетом летнего времени (сдесь летнее, было бы зимнее было бы +0300), т.е. даже думать не надо на эту тему просто приплюсовал часы с минутами и все.
> и еще много-много-много разных прочих вариантов...
вариант единственный, все что не укладывается в схему есть ошибочная запись, т.е. не получилось преобразовать выдавай ексепт.
← →
Плохиш © (2007-07-18 11:25) [9]
> время по гринвичу + сколько добавить чтобы получить локальное,
Да это в RFC822, но, к сожалению, по сети очень часто гуляет в формате "время местное + разница со временем по гринвичу" и в XSBuiltIns.pas его также интерпретируют. Функции DateTimeToXMLTime и XMLTimeToDateTime.
← →
Anatoly Podgoretsky © (2007-07-18 11:29) [10]> Плохиш (18.07.2007 11:25:09) [9]
Это другое время, не RFC822 и для него нужен другой парсер.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.08.12;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.05 c