2012-02-13 1 views
1

сохраняет эпоху метки времени и часовые пояса посетителя сохраняются как Olson идентификатор, например Europe/LondonПреобразовать Olson Идентификатор часового пояса по Гринвичу +/- X

if($userTz && $userTz ne "Europe/London"){ 
    $ENV{TZ} = "$userTz"; 
} 

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time); 
... 

После эпохи отображается в соответствующей временной зоне, я хочу место после даты/времени, что является часовым поясом. Пример GMT + 4 вместо Азии/Маската (используя пример GMT + 4)

+0

Вы пытались выяснить, используя документацию Perl или Google? Другими словами, что вы пробовали до сих пор? –

+0

Да, да, я что-то пропустил? – dannix

ответ

3

Вам необходимо DateTime/DateTime::TimeZone.

Смещение в секундах (смотрите также связанные с ними способы offset_as_seconds и offset_as_string):

DateTime::TimeZone->new(name => 'Asia/Muscat')->offset_for_datetime(DateTime->now) 
# 14400 

ISO 8601/RFC 3339 спецификатор

DateTime->now(time_zone => 'Asia/Muscat')->strftime('%z') 
# '+0400' 

GMT ± Х не является стандартной , не ожидайте, что какая-либо система или программное обеспечение будут взаимодействовать с этой нотацией. Как вы выражаете в этой схеме зоны, которые не являются полночасовыми смещениями, такими как Азия/Тегеран? Текущая система основана на UTC, так или иначе: http://enwp.org/UTC%2B04:00. Наивная реализация может калечить одно из значений сверху.

+0

Вы можете сделать 'DateTime-> now (time_zone => 'Asia/Muscat')' вместо 'DateTime-> now-> set_time_zone ('Asia/Muscat')'. Не имеет большого значения для 'now', но это имеет большое значение для' today'. – ikegami

+0

Если GMT сейчас UTC, как UTC обрабатывает 1/2 часа? Я ожидаю, что это будет +04: 30 Я рад использовать правильный стандарт, но не хотел Азии/Маската. Я предпочел бы эквивалент UTC или код страны ISO, поскольку он короче для отображения. Фактическая временная метка сохраняется в базе данных как GMT, мой местный часовой пояс также в той же зоне, что и UTC, с некоторыми секундами бездействия. Это дата показа, поэтому интероперабельность здесь не проблема – dannix

Смежные вопросы