Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.025 c
14-1132560471
Карелин Артем
2005-11-21 11:07
2005.12.11
Приколы в Д7


2-1133043077
Дмитрий Ка
2005-11-27 01:11
2005.12.11
Как изменить знак перемнной?


14-1132637157
DelphiN!
2005-11-22 08:25
2005.12.11
Отоброжение смежных ячеек


3-1130138638
syte_ser78
2005-10-24 11:23
2005.12.11
украинская локализация


4-1128667534
Ji
2005-10-07 10:45
2005.12.11
Изменение текста на форме после ее отрисовки




   Наверх