我保存历元时间戳,访客时区保存为Olson id,例如欧洲/伦敦
if($userTz && $userTz ne "Europe/London"){
$ENV{TZ} = "$userTz";
}
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($time);
...
一旦历元显示在相关时区中,我想将时区放在日期/时间之后。示例GMT+4而不是亚洲/马斯喀特(使用GMT+4示例)
您需要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±X是非标准的,不要期望任何系统或软件与此符号进行互操作。在该方案中,你如何表达非全小时补偿的区域,如亚洲/德黑兰?无论如何,当前系统是基于UTC的:http://enwp.org/UTC%2B04:00.天真的实施可能会破坏上面的一个价值观。