将Olson时区id转换为GMT +/- X.

时间:2012-02-13 05:43:46

标签: perl timezone

我保存纪元时间戳,访客时区保存为Olson ID,例如欧洲/伦敦

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

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

一旦纪元显示在相关时区,我想在日期/时间之后放置时区。示例GMT + 4而不是Asia / Muscat(使用GMT + 4示例)

1 个答案:

答案 0 :(得分: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。一个天真的实现可能会破坏上面的一个值。