Определение местного времени в другом часовом поясе - PullRequest
2 голосов
/ 11 января 2011

Как определить текущую дату и время в разных странах, используя скрипт PERL, который выполняется на сервере в США? Например, getDTnow () должен определять текущую дату и время на сервере и использовать их для возврата даты и времени различных стран.

P.S : Было бы здорово, если бы это можно было сделать, используя только встроенные функции, без каких-либо внешних модулей.


Заключение : математика по дате [используйте ругательство здесь] сложно и легко ошибиться. Другие Perl-гуру в IRC, группах и других частях сети подтвердили то, что Эфир советовал мне - используйте DateTime . Решение DVK также очень удобно для тех из вас, кто не возражает возиться с perl-средой. ( Примечание : Хотя в Windows раздел caveats Time :: Piece docs говорит, что нужно быть осторожным, пока ' Установка $ ENV {TZ} в потоках на Win32 ).

Ответы [ 3 ]

6 голосов
/ 11 января 2011

DateTime - замечательная библиотека, которая может использовать стандартные часовые пояса, чтобы делать все, что вы пожелаете, и даже больше:

use DateTime;

# returns local time in Italy
my $dt = DateTime->now(time_zone => 'Europe/Rome');

# prints time in desired format
print "The current date and time in Italy is: ", $dt->strftime('%Y-%m-%d %T');
2 голосов
/ 11 января 2011

Вы можете контролировать, какой часовой пояс возвращается по местному времени с помощью 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.

0 голосов
/ 11 января 2011

Вы всегда можете сохранить отклонение от вашего часового пояса в хэше, где ключ - это часовой пояс, а значение - это корректировка текущего времени.затем, когда вы передаете текущее время, оно должно вернуть местное время для этой зоны.

...