2012-02-13 2 views
1

내가 저장 시대 타임 스탬프 및 방문자 시간대 올슨 아이디, 예를 들어로 저장됩니다 유럽/런던신기원이 해당 시간대에 표시되면 +/- X

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

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

내가 원하는 GMT에 올슨 시간대 ID를 변환 시간대가 무엇인지 날짜/시간 뒤에 배치하십시오. 예 아시아/무스카트 대신 GMT + 4 (GMT + 4 예제 사용)

+0

Perl 설명서 또는 Google을 사용하여 찾으려고 했습니까? 즉, 지금까지 무엇을 시도 했습니까? –

+0

예, 제가 뭔가를 놓쳤습니까? – dannix

답변

3

DateTime/DateTime::TimeZone이 필요합니다. 초 오프셋

(참조 관련 방법 offset_as_secondsoffset_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 ± X는 비표준 시스템 또는 소프트웨어가이 표기법과 상호 운용 될 것을 기대하지 마십시오. 이 계획에서 아시아/테헤란과 같이 정각 외가 아닌 지역을 어떻게 표현합니까? 현재 시스템은 UTC (어쨌든 http://enwp.org/UTC%2B04:00)를 기반으로합니다. 순진한 구현은 위의 값 중 하나를 조작 할 수 있습니다.

+0

'DateTime-> now-> set_time_zone ('Asia/Muscat') 대신'DateTime-> now (time_zone => 'Asia/Muscat')'을 할 수 있습니다. '지금'은별로 중요하지 않지만 '오늘'은 많은 차이가 있습니다. – ikegami

+0

GMT가 UTC 일 경우 UTC가 어떻게 반 시간을 처리합니까? 나는 그것이 +04 : 30이라고 말하는 것을 기대한다 정확한 표준을 사용하게되어 기쁘지만 아시아/무스카트는 싫어한다. 표시하는 것이 더 짧기 때문에 UTC 오프셋 또는 ISO 국가 코드를 선호합니다. 실제 타임 스탬프는 데이터베이스에 GMT로 저장됩니다. 내 로컬 시간대는 UTC와 동일한 시간대에 의심의 여지가 없습니다. 디스플레이 날짜이므로 상호 운용성은 여기에서 문제가되지 않습니다. – dannix

관련 문제