Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Как получить Timezone системы?


Автор: lukas 24.10.2009, 13:56
Люди нужно получить Timezone примерно вот такого формата: Europe/Oslo или Asia/Singapore ну и т.д. Такой формат испоользуется в php и мне нужен именно такой формат, а не просто часовой пояс.

Может кто нить уже реализовывал такую функцию?

Автор: Keeper89 24.10.2009, 15:30
Имхо, это нереально, т.к. есть города и страны с одинаковым UTC.

Либо надо делать свою БД наподобие вот http://www.timezoneconverter.com/cgi-bin/findzone/findzone.tzc, определяя отклонение от Гринвича:
Код

function GetTimeZoneBias: Longint;
var
  TimeZone: TTimeZoneInformation;
begin
  GetTimeZoneInformation(TimeZone);
  Result := TimeZone.Bias div -60;
end; 


З.Ы. У меня PHP не установлен, но стоит посмотреть, как это реализовано там.

Автор: lukas 24.10.2009, 15:47
Цитата(Keeper89 @  24.10.2009,  15:30 Найти цитируемый пост)
Имхо, это нереально, т.к. есть города и страны с одинаковым UTC.

Либо надо делать свою БД наподобие вот этой, определяя отклонение от Гринвича:


Но проблема еще в том, что есть страны и города с одинаковым UTC но без перехода на летнее/зимнее время. Как быть?

Вот так устанавливается часовой пояс в php

Код

 date_default_timezone_set('Etc/GMT+5');
// но тут не понятно с переходом на летнее зимнее время


или так

Код

 date_default_timezone_set('Europe/Oslo');



Мне надо получить такой формат с помощью delphi, т.к. php движок выполняется на компе через delphi и нужно задать этот часовой пояс для корректной работы.

Может кто нибудь знает, что это за формат часовых поясов? У него есть какой нибудь стандарт.

Автор: Keeper89 24.10.2009, 16:07
Такой формат подходит или нет:
Код

date_default_timezone_set('Etc/GMT+5');

?
И что такое Etc?

Автор: lukas 24.10.2009, 16:11
Keeper89, 

http://php.net/manual/en/timezones.others.php

Автор: CodeMonkey 24.10.2009, 16:57
А зачем вам такой формат?

Автор: Keeper89 24.10.2009, 17:21
lukas, 
ну, если он этот формат воспринимает, можно попробовать так:
Код

function GetTimeZoneString: string;
var
  TimeZone: TTimeZoneInformation;
  curBias: LongInt;
begin
  GetTimeZoneInformation(TimeZone);
  curBias:= TimeZone.Bias div -60;
  if curBias > 0 then
    Result := 'Etc/GMT+' + IntToStr(curBias)
  else
    Result := 'Etc/GMT' + IntToStr(curBias)    
end; 


Запостите PHP-функцию, посмотрим как там это реализуется.

Автор: lukas 24.10.2009, 17:49
Все всем спасибо, выкрутился другим способом, аказывается PHP определял часовой пояс, но выводил предупреждение о том что пояс может определятся не корректно и его нужно задать самому. Я отключил вывод этих notice'в и все заработало как надо.

Работал я с PHP4Delphi, у кого будут похожие проблемы с датами в этом пакете могу помочь.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)