Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

TDateTime и зимнее/летнее время и пересчёт из/в UNUX Timestamp   Найти похожие ветки 

 
mfender ©   (2005-11-12 11:08) [0]

Здравствуйте все! Давненько меня тут не было. :)
Проблема такая:
В таблице MySQL я храню дату/время в Integer, как это предусмотрено в PHP (количество секунд, прошедших с 1 января 1970 года). На локальной машине пересчитываю его для TDateTime так:

function DT2Unix(DT: TDateTime): Integer;
begin
 Result := ((Trunc(DT) - 25569) * 86400) +
           Trunc(86400 * (DT - Trunc(DT))) - 7200;
end;

function Unix2DT(DT: Integer): TDateTime;
begin
 Result := ((DT + 7200) / 86400) + 25569;
end;


Получается такая бодяга: время отстаёт на час в случае зимнего времени (сейчас), а записи, сделанные в летнее время отстают на два часа.
Уже всю голову сломал... Где я могу ошибаться?


 
mfender ©   (2005-11-12 11:14) [1]

Я тормоз. Сам же встрамил эти 7200 секунд... :)))
Теперь код выглядит так:

function DT2Unix(DT: TDateTime): Integer;
begin
Result := ((Trunc(DT) - 25569) * 86400) +
          Trunc(86400 * (DT - Trunc(DT))) ;
end;

function Unix2DT(DT: Integer): TDateTime;
begin
Result := (DT / 86400) + 25569;
end;


Но проблема остаётся. Время, как уже было сказано, хранится по Гринвичу. Чем в Delphi можно перевести его в локальное?


 
Anatoly Podgoretsky ©   (2005-11-12 11:45) [2]

А ты не храни по Гринцичу, а храни в UTC


 
mfender ©   (2005-11-12 11:58) [3]


> Anatoly Podgoretsky ©   (12.11.05 11:45) [2]
> А ты не храни по Гринцичу, а храни в UTC

Анатолий, я бы с радостью, но слишком многое придётся менять (к тому же, я думаю, что функция time() в PHP время выдаёт именно UTC). Суть не в том.
Пытаюсь найти, где в системе хранится информация о временной зоне. Потому и спрашиваю, не знает-ли кто этого?
Кстати, пока искал, обнаружил, что в DateUtils есть две замечательные функции: UnixToDateTime и DateTimeToUnix. А я-то высчитывал... :)))


 
Anatoly Podgoretsky ©   (2005-11-12 12:04) [4]

Эти функции были не всегда.


 
Anatoly Podgoretsky ©   (2005-11-12 12:11) [5]

GetTimeZoneInformation для текущей зоны


 
mfender ©   (2005-11-12 12:27) [6]


> Anatoly Podgoretsky ©   (12.11.05 12:04) [4]
> Эти функции были не всегда.

Согласен.


> Anatoly Podgoretsky ©   (12.11.05 12:11) [5]
> GetTimeZoneInformation для текущей зоны

Я нашел её описание в help"е, но как её использовать? В частности, как взять оттуда Bias? Я не очень-то умею пользоваться этими функциями. Где она хоть находится?


 
mfender ©   (2005-11-12 12:48) [7]

Спасибо, Анатолий. Помогло. :)


 
Anatoly Podgoretsky ©   (2005-11-12 13:46) [8]

Может тебе будет полезнее SystemTimeToTzSpecificLocalTime
Зачем вручную бороться?


 
mfender ©   (2005-11-12 15:14) [9]


> Может тебе будет полезнее SystemTimeToTzSpecificLocalTime
> Зачем вручную бороться?

Посмотрю, попробую. Спасибо.



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

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.032 c
2-1132637227
Рафик
2005-11-22 08:27
2005.12.11
Из Delphi3 в Delphi7


14-1132583518
ArtemESC
2005-11-21 17:31
2005.12.11
Как програмно выключить или перезагрузить компьютер?


1-1131611030
hgd
2005-11-10 11:23
2005.12.11
Как сравнить два цвета RGB?


4-1128284071
XeON
2005-10-03 00:14
2005.12.11
CD эмулятор


2-1132917097
начиннающий
2005-11-25 14:11
2005.12.11
прорисовка формы