Преобразование часового пояса в 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
Другие вопросы по тегам