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

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.039 c
14-1132242762
U-stack
2005-11-17 18:52
2005.12.11
Отключить Касперского


14-1132639371
Ega23
2005-11-22 09:02
2005.12.11
С днем рождения! 22 ноября


5-1116406147
Priest
2005-05-18 12:49
2005.12.11
Свойство ComponentState у TForm в DreamDesigner


2-1133109175
Neosted
2005-11-27 19:32
2005.12.11
Текстовый файл


2-1132918799
kay
2005-11-25 14:39
2005.12.11
Есть non-unicode программа, как её запустить с правильным отображ





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский