DataTime - дайте идея...

5 отговора 310 прегледа
#1

DataTime - дайте идея...

Едно въпросче за раздвижване на сивото вещество, че явно аз тотално съм забил.
Та въпроса е следния - ICQ и history-файловете - ако сте ги разглеждали -там има нещо подобно

<event>
<type>0</type>
<incoming>Yes</incoming>
<time>1144585987</time> <------- ТЕ за това става дума
<text>това трябва да е текста на съобщението.
</text>
</event>

До колкото знам DataTime-a е реално число (Double) - ама тук явно е конвертирано или кодирано по някав начин - не е само дата - ами и часа е кодиран :(
Дайте идеи - просто се базикам искам да си прекарам history-to в по нормален вид.
P.S.
сори за днешната среща ако я е имало - но бях out. Следващия път ще съм на линия.

---
Отговор
в отговор на PhantomAS #2

Re: DataTime - дайте идея...

Прилича ми на секунди след някоя дата (за Юникс например, след 1.1.1970)
1148415667 е някъде около вчера (23-ти) след обяд или вечерта.
Твоето е с около 4 000 000 секунди по-малко (май е от преди около 40 дни), но това - ако базата е същата.

Отговор
в отговор на PhantomAS #3

И още :)

xDtTm_1_1_1970 е 25569 (по оня начин, който описваш)

значи може да пробваш - това трябва да е преобразуването:

25569+(новото ти число)/24/60/60

25569+(1144585987)/24/60/60

И като напишеш нещо ценно, да го споделиш :)

Отговор
в отговор на NikB #4

Re: И още :)

10x - ще пробвам - това за UNIX-a не ми беше хрумвало - язък, че последните месеци тренирах пускане и чоплене в скриптове някои от тях имаха параметри дати.

---
Отговор
в отговор на NikB #5

10x- ето и решението...

Не съм го писал аз - но пък ти ми помогна да го намеря бързо...

function UNIXTimeToDateTime(UNIXTime: LongWord): TDateTime;
var
TimeZoneInformation: TTimeZoneInformation;
begin
GetTimeZoneInformation(TimeZoneInformation);
Result := StrToDate('01/01/1970') + (UNIXTime/(24*3600)) - ((TimeZoneInformation.Bias + TimeZoneInformation.DaylightBias) / (24 * 60));
end;

function DateTimeToUNIXTime(DelphiTime : TDateTime): LongWord;
var
MyTimeZoneInformation: TTimeZoneInformation;
begin
GetTimeZoneInformation(MyTimeZoneInformation);
Result := round(DelphiTime - StrToDate('01/01/1970') + ((MyTimeZoneInformation.Bias) / (24 * 60))) * (24 * 3600);
end;

---
Отговор
в отговор на PhantomAS #6

Няма да повярваш, но точно преди 48 часа

Няма да повярваш, но точно преди 48 часа си мислех, че когато имам време ще се занимая с часовите зони на това преобразуване. Оная вечер направо извадих 3 часа от времето на сървъра и работата заспа.
Та и аз да ти благодаря, че ми спести ровене из DateTime функциите!
Все пак, когато ползваш тия времена, трябва да си сигурен, че са по гринуич.

Отговор