Преобразование часового пояса в Perl - но только с использованием основных модулей
Можно ли в будущем выполнять преобразование часового пояса для произвольной даты, используя только основные модули Perl?
Допустим, у меня есть Day:month: year, hr:min в часовом поясе X (предположим, это полностью определенный часовой пояс, такой как America/New_York), и мне нужно преобразовать его в часовой пояс Y (скажем, Asia/Kolkata)
Некоторые заметки:
1) Это для OSX (Lion или выше)
2) Я знаю, как это сделать, используя DateTime и DateManip, но это не основные модули, и для их установки требуется наличие компилятора C. Я пытаюсь распространить свою программу среди "не технических" пользователей - они могут выполнить установку Perl-модулей с помощью, но разваливаются при попытке заставить работать XCode, инструменты командной строки и т. Д. Некоторые пытались установить DateTime, но попали в ошибки / зависимости и сдались.
3) Я пытался использовать комбинацию tzset; и ENV TZ - но это не может быть использовано для произвольных дат - работает только с местным временем (что означает, что я могу преобразовать 'сейчас время' в любой часовой пояс)
1 ответ
Используйте основной модуль POSIX. Пример:
use POSIX;
$ENV{TZ} = 'Europe/Madrid';
$time_t = POSIX::mktime( 10, 30, 17, 4, 4, 113 );
print POSIX::ctime($time_t); #<-- prints: Sat May 4 17:30:10 2013
$ENV{TZ} = 'Europe/London';
print POSIX::ctime($time_t); #<-- prints: Sat May 4 16:30:10 2013