2013-06-11 4 views
0

У меня есть дата в формате: 05/26/2013 06:08:00
часового пояса указанной даты GMT -7Perl преобразование даты часового пояса без модуля даты и времени

как я могу изменить выше GMT дата и время и в формате: 26 мая 2013 г. 13:08:00 GMT

Примечание: я не могу установить модуль perl. Я знаю, что я могу сделать это легко через DateTime, но я не могу его установить.

Спасибо.

+1

Какая версия Perl? Почему бы не использовать local :: lib и установить DateTime для вас? –

+0

@MiguelPrz Это производственная машина. Существуют разные причины не устанавливать модули perl. Благодарю. – david

+0

вы уверены, что знаете фиксированное смещение, что иногда нет летнего времени? – ysth

ответ

3

Вы можете использовать Time::Piece, который должен быть включен с вашей установкой на Perl.

use Time::Piece; 

my $datetime = '05/26/2013 06:08:00'; 
$datetime .= '-0700'; # attach the timezone offset 

my $dt = Time::Piece->strptime($datetime, '%m/%d/%Y %H:%M:%S %z'); 
print $dt->strftime('%d %b %Y %H:%M:%S'); 
+0

Awesome, спасибо! Является ли это достаточно эффективным, чтобы запустить его для 10000 записей за раз? – david

+0

Должно быть, это быстрый и легкий модуль. Но было бы лучше, если бы вы протестировали его сами. – stevenl

+0

Следует отметить, что 'Time :: Piece' стал основным модулем с Perl v5.9.5. – doubleDown

3

Если предположить, что местное время уже установлен в GMT-7 просто:

use POSIX 'mktime', 'strftime'; 
my $datetime = '05/26/2013 06:08:00'; 
my ($month,$day,$year,$hour,$min,$sec) = $datetime =~ m{^([0-9]+)/([0-9]+)/([0-9]+) ([0-9]+):([0-9]+):([0-9]+)\z} 
    or die "invalid datetime $datetime\n"; 
my $formatted_time = strftime '%e %B %Y %T %Z', gmtime mktime $sec,$min,$hour,$day,$month-1,$year-1900,0,0,0; 

Вы можете %d вместо %e и/или %b вместо %B; см. http://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html и убедитесь, что требуемые спецификаторы формата поддерживаются в вашей системе.

+0

Спасибо, я тестирую его – david

+0

+1 для вас, спасибо – david