Вы можете контролировать, какой часовой пояс возвращается по местному времени с помощью TZ
переменной среды:
local $ENV{TZ} = ":/usr/share/lib/zoneinfo/Asia/Tokyo";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime();
print "$sec,$min,$hour,$mday,$mon,$year,$wday,$yday\n"'
# Prints 40,58,4,12,0,111,3,11
local $ENV{TZ} = ":/usr/share/lib/zoneinfo/Europe/London";
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime();
print "$sec,$min,$hour,$mday,$mon,$year,$wday,$yday\n"'
# Prints 41,58,19,11,0,111,2,10
К сожалению, приведенный выше путь отличается в разных Unix-системах (/usr/share/lib/zoneinfo
в Solaris, /usr/share/zoneinfo
в Linux). Поскольку, похоже, других вариантов не существует, переносимая версия слегка будет проверять, какой из 2 каталогов существует, и использовать это - но это, очевидно, работает только в Solaris и Linux и может быть другими unixes. Понятия не имею о Windows / MacOS / еще много чего.
Допустимые местоположения для TZ можно найти здесь: http://www.timezoneconverter.com/cgi-bin/tzref.tzc (но не все из них обязательно будут доступны в вашей системе - проверьте каталог выше).
Для получения дополнительной информации о базе данных TZ см. http://en.wikipedia.org/wiki/Tz_database.