Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];

Вниз

E-Mail Indi 10 (BDS 4) TIdMessage DateTime format   Найти похожие ветки 

 
iXT   (2006-11-08 17:32) [0]

Время доброе всем.

Есть вопросик. При создании сообщения (TIdMessage) значение Date: ............ hh:mm:ss +0000

Логично, что из-за этого при приеме время улетает на 3 (ну у кого как) часа
Почему он ставит "нулевой часовой пояс". Где какую галку поставить
P.S.
 В окнах все стоит как надо: +3


 
umbra ©   (2006-11-09 10:53) [1]

потому, что св-во TIdMessage.Date имеет тип TDateTime, который ничего про часовые пояса не знает. Надо вручную править заголовок, прописывая нужное смещение


 
iXT   (2006-11-09 11:04) [2]

Согласен, этот вариант всегда есть, НО

на каком основании он вставляет +0000? Ставил уж тогда бы из Widows. Ведь это время создания сообщения, TDateTime - текущее тремя вставил, а затем так просто: "+0000".


 
umbra ©   (2006-11-09 11:27) [3]

ну, в справке написано, что в этом св-ве - время в локальной зоне. Может поэтому и пишут +0000
а может авторы так шутят. Вот, например, я долго думал, почему у меня не работает TIdConnectTroughHTTPProxy. Затем полез в исходники, а в модуле комментарий типа "допишите этот класс и поместите в другой модуль". Шутники.


 
Anatoly Podgoretsky ©   (2006-11-09 11:28) [4]

> iXT  (09.11.2006 11:04:02)  [2]

На основание, что ты ему не оставил другой возможности.


 
iXT   (2006-11-09 11:53) [5]


> что в этом св-ве - время в локальной зоне

Это свойство я не заполняю - это раз. Сво-во UseNowForDate и true и false, хотя дату ставит текущую всеравно (может потому что Date пустое)


> На основание, что ты ему не оставил другой возможности.

Какой я плохой, а если можно, то в каком "месте" у него появится эта другая возможность?


 
Anatoly Podgoretsky ©   (2006-11-09 13:26) [6]

Дату для данного случая надо понимать как дату + время, плюс смещение и плюс то что ты не сумел привести. Дата должна быть в соответствии с RFC

> Сво-во UseNowForDate и true и false,

Это слова, а у нас принято фактами оперировать, иначе будем трепаться, раз автор трепется.

ЗЫ: Инди она поставляется в исходных текстах!!!


 
iXT   (2006-11-09 16:22) [7]

2 Anatoly Podgoretsky

Ну какой тут треп???
Помоему все, очень даже, конкретно сказано

 IdMessage.Clear;
 IdMessage.From.Name:="Sender";
 IdMessage.From.Address:="sender@local.net";
 IdMessage.Recipients.EMailAddresses:="reciver@local.net";
 IdMessage.Subject:="Test message with attachment";
 IdMessage.SaveToFile("c:\test.msg");


Получаем

From: "Sender" <sender@local.net>
Subject: Test message with attachment
To: reciver@local.net
Date: Thu, 9 Nov 2006 11:52:03 +0000

.
при изменение UseNowFor Date получаем такой же результат

> Дату для данного случая надо понимать как дату + время,
> плюс смещение и плюс то что ты не сумел привести


Что значит не сумел привести??? Если "Now - x/24", то мы получим:
Date: Thu, 9 Nov 2006 08:52:03 +0000
а надо:
Date: Thu, 9 Nov 2006 11:52:03 +0300

Есть
TIdDateTimeStamp
"Класс для выполнения математических действий с датой и временем, связанных с тем, что Интернет-протоколы используют различные форматы даты и времени; кроме того, клиенты и серверы могут находиться в различных часовых поясах."

Но как его юзать пока не допетрил!


 
Anatoly Podgoretsky ©   (2006-11-09 16:36) [8]

> iXT  (09.11.2006 16:22:07)  [7]

Что то я не видел этой строки Date: Thu, 9 Nov 2006 11:52:03 +0000 раньше!

Это нормальное, локальное, зимнее время со смещением 0, такое время наблюдается на нулевом меридиане, например в Гринвиче. По формату соответствует RFC
Если уберешь +0000 то это будет абсолютное время


 
iXT   (2006-11-09 16:51) [9]


> Что то я не видел этой строки Date: Thu, 9 Nov 2006 11:52:
> 03 +0000 раньше!

Она была в [0] (немного цифры на hh,mm и т.п. поменял)

В том то и дело, что TIdMessage создает именно такую строку.
(какого +0000, откуда???)
Пример который с Indi идет создает такиеже сообщения (+0000)


 
Anatoly Podgoretsky ©   (2006-11-09 17:04) [10]

> iXT  (09.11.2006 16:51:09)  [9]

В ноль были точки!


 
Anatoly Podgoretsky ©   (2006-11-09 17:05) [11]

> iXT  (09.11.2006 16:51:09)  [9]

Так они же американцы.
Смотри справку по Инди, хоть и тяжело, но надо.
Допускаю возможность, что это не возможно, они же американцы.


 
Anatoly Podgoretsky ©   (2006-11-09 17:06) [12]

> iXT  (09.11.2006 16:51:09)  [9]

Сам я крест на Инди поставил месяц назад и успел уже полностью забыть. Снова изучать не стоит. Хотя и справка и примеры есть. Но это должна быть управляемая вещь.


 
iXT   (2006-11-09 17:07) [13]

Ладно, есть идеи, как сие должно работать?


 
iXT   (2006-11-10 10:24) [14]

Вобщем, итог таков.
Самое противное, что куча народа писали программы с TIdMessage (в том числе и demo) - результат вышеописан...

У меня сообщение сохраняется в фаил. Думаю самый простой способ исправить это после в файле.

Есть вариант править это в TIdMessage, и наверное он более правелен, но как это сделать практически не знаю (.Headers.Count = 0). Может еще где???

Топик остается открытым, если у кого еще созреют идеи ...

2 Anatoly Podgoretsky
[13] после [10] писал!


 
Anatoly Podgoretsky ©   (2006-11-10 13:46) [15]

> iXT  (10.11.2006 10:24:14)  [14]

> У меня сообщение сохраняется в фаил. Думаю самый простой способ исправить это после в файле.

Так ты про полученые сообщения говоришь, тогда решение правильное, а если про отправку, то не понятна сама идея сохранять в файле.


 
iXT   (2006-11-10 14:55) [16]


> а если про отправку, то не понятна сама идея сохранять в
> файле.


Нет, сообщения отправляются. Ну это не суть проблемы. Сейчас дабы перед тем как посмотреть что я отправлю, я ее в файл сохраняю.


 
iXT   (2006-11-10 16:00) [17]

Indi 9 делает +0300 !!!!!!!!!!!!!!!!!!!!!!!!

Бред


 
Anatoly Podgoretsky ©   (2006-11-10 16:14) [18]

> iXT  (10.11.2006 16:00:17)  [17]

Я уже забросил Инди, но это должно настраиваться, поройся по справке, по исходному тексту, иначе я не пойму как же люди работают то. Ведь это базовая вещь.


 
iXT   (2006-11-10 16:59) [19]


> как же люди работают то. Ведь это базовая вещь.

И я про то!


> это должно настраиваться, поройся по справке, по исходному
> тексту,


Роюсь, роюсь! Даже Indi 9 пропробывал (D7)


 
Anatoly Podgoretsky ©   (2006-11-10 17:05) [20]

> iXT  (10.11.2006 16:59:19)  [19]

Вижу, если бы не монстр и если бы я не поставил на нем крест, то тоже бы взглянул, а так оно мне надо. Но я тебя спросил про сохранение файла, прояснился бы?


 
iXT   (2006-11-10 17:38) [21]

1. Сейчас сохраняю, чтобы посмотреть что формируется! Сперва отправлял сразу - получил что фаил отправлен "через 3 часа". Поэтому решил сохранить в файл.
2. Вообще задумка, что программа которая формирует (что отправить) может и не иметь на месте возможность отправлять по SMTP. Она кладет в определенное место файл. А другая программулька должна смотреть, если есть, то отправлять.


 
Anatoly Podgoretsky ©   (2006-11-10 18:26) [22]

> iXT  (10.11.2006 17:38:21)  [21]

Вот теперь по пункту 1 понятно, для тестовых целей.

По пункту 2, другая программа имеет право менять данный заголовок как считает нужным.

У меня сейчас была открыта справка, я посмотрел немного и по Инди.
Заголовок Date относится к TIdMesssage одноименное поле, оперировать надо с ним и в данном случае использовать надо UTC.
Другое свойство UseNowForDate если оно установлено в False то будет использовано свойство Date, которое и установи в UTC

Можно также попробовать работать с заголовками напрямую, для этого еще покопайся со справкой, как получить и как их изменить


 
iXT   (2006-11-11 13:21) [23]

Нашел КОСЯК

Реализация функции OffsetFromUTS:

Indi 9:

{$IFDEF MSWINDOWS}
function OffsetFromUTC: TDateTime;
var
 iBias: Integer;
 tmez: TTimeZoneInformation;
begin
 Case GetTimeZoneInformation(tmez) of
   TIME_ZONE_ID_INVALID:
     raise EIdFailedToRetreiveTimeZoneInfo.Create(RSFailedTimeZoneInfo);
   TIME_ZONE_ID_UNKNOWN  :
      iBias := tmez.Bias;
   TIME_ZONE_ID_DAYLIGHT :
     iBias := tmez.Bias + tmez.DaylightBias;
   TIME_ZONE_ID_STANDARD :
     iBias := tmez.Bias + tmez.StandardBias;
   else
     raise EIdFailedToRetreiveTimeZoneInfo.Create(RSFailedTimeZoneInfo);
 end;
 {We use ABS because EncodeTime will only accept positve values}
 Result := EncodeTime(Abs(iBias) div 60, Abs(iBias) mod 60, 0, 0);
 {The GetTimeZone function returns values oriented towards convertin
  a GMT time into a local time.  We wish to do the do the opposit by returning
  the difference between the local time and GMT.  So I just make a positive
  value negative and leave a negative value as positive}
 if iBias > 0 then begin
   Result := 0 - Result;
 end;
end;
{$ENDIF}


Indi 10

class function TIdSysVCL.OffsetFromUTC: TIdDateTimeBase;
begin
 Result := 0;
end;


Афигительная процедура


 
iXT   (2006-11-13 11:13) [24]

Кто юзает 2006 (Indy 10), гляньте, плз, модуль IdSysVCL.pas функция TIdSysVCL.OffsetFromUTC. Может это только у меня такое "ранение тяжелое"?

2 Anatoly Podgoretsky

> Я потратил на него достаточно много времени, потом плюнул и перешел на ICS.

Что за зверь?


 
Anatoly Podgoretsky ©   (2006-11-13 11:31) [25]

> iXT  (13.11.2006 11:13:24)  [24]

Это другой комплект компонент для работы с Интернет, работающий по другим принципам, Борланд на него облизывался, но автор не дал, тогда подобрали Инди.
Инди разрабатывался для мира Юникс и портировали неглядя на Виндоус, отсюда некоторые проблемы, надо вникать в его идеологию и писать в ее стиле. И что плохо, чем дальше, тем больше становится монстром, но работать можно, с учетом идеологий, если не обращать на идеологию внимания, то вполне достойный набор. Работать только тяжеловато, но это на первых порах. Я решил не затягивать этот период, а сразу рвануть на идеологию Виндоус и Дельфи. Пока не жалею, но некоторым наоборот ICS не нравится, им с Инди проще.


 
iXT   (2006-11-15 12:12) [26]

Переставил, Delphi с Indi 9. Работает правильно (пока). Если нарвусь еще на косяк, будет повод подумать всетаки перейти на ICS. Пока останусь. Благодарю за дисскусию по проблеме. Всем желаю удачи!


 
Anatoly Podgoretsky ©   (2006-11-15 13:45) [27]

> iXT  (15.11.2006 12:12:26)  [26]

Правильно без нужды не переходи, а то придется перестравивать мозги и идеологию.
Но что же ты не прислушался к рекомендациям, они решают проблему


 
iXT   (2006-11-15 17:13) [28]


> Правильно без нужды не переходи, а то придется перестравивать
> мозги и идеологию.

Уже поздняк метаться :)


> Но что же ты не прислушался к рекомендациям, они решают
> проблему


Которые именно ???



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2007.05.20;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.52 MB
Время: 0.042 c
15-1176825502
Layner
2007-04-17 19:58
2007.05.20
Посоветуйте тулз для разрезки видео файла MPEG4 почастям


9-1131474378
WD
2005-11-08 21:26
2007.05.20
вычисление числа Пи с заданной точностью


15-1176755469
ppcumax
2007-04-17 00:31
2007.05.20
Где взять библиотеку kernel32.dll?


1-1174565452
thecat
2007-03-22 15:10
2007.05.20
Где взять mmx.dcu?


2-1178366375
Ламер 2.Х
2007-05-05 15:59
2007.05.20
Перезагрузка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский