Текущий архив: 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.46 MB
Время: 0.041 c