2016-10-12 9 views
0

Я пытаюсь преобразовать входящую дату в другой формат ниже, это код, который я написал.Преобразование одного формата даты в другой формат с использованием perl Date :: Manip

#!/usr/bin/perl 
# 
use POSIX qw(strftime); 
use Date::Manip; 
my $string = "Run started at 12:01:48 PM on Aug 19 2016 "; 

my @array = split(' ',$string); 

$string = "12:01:48 PM Aug 19, 2016"; 

$unix_time = UnixDate(ParseDate($string), "%s"); 
#print $unix_time; 

my $datestring = strftime "%a %b %e %H:%M:%S %Y", gmtime($unix_time); 
printf("date and time - $datestring\n"); 

Я хочу, чтобы выход в Fri Aug 19 12:01:48 2016, но прямо на ПМ не получает считается пожалуйста, вы можете помочь мне здесь?

+3

Итак, вы перезаписываете '$ string' с очищающей версией? Зачем показывать нам первую '$ string' и' split' to '@ array', которые вы никогда не используете вообще? Это просто сбивает с толку. Пожалуйста, отредактируйте и удалите неиспользуемые части. Также укажите информацию, которую вы получаете. – simbabque

ответ

4

Считаете ли вы использование Time::Piece вместо даты :: Манипу? Он является частью стандартного дистрибутива Perl (начиная с Perl 5.10) и обычно считается намного превосходящим Date :: Manip.

Чтобы преобразовать вашу строку в объект Time :: Piece, необходимо использовать strptime() (время синтаксического разбора), а затем strftime() (время форматирования строки), чтобы преобразовать объект в строку в требуемом формате.

#!/usr/bin/perl 

use strict; 
use warnings; 
# We use modern Perl - specifically say() 
use 5.010; 

use Time::Piece; 

my $string = '12:01:48 PM Aug 19, 2016'; 

my $tp = Time::Piece->strptime($string, '%H:%M:%S %p %b %d, %Y'); 

say $tp->strftime('%a %b %e %H:%M:%S %Y'); 

Update: И ответить на ваш первоначальный вопрос, я думаю, вы получаете сожжен часовых поясов. Кажется, что ParseDate() предполагает, что строка находится в локальном часовом поясе, но вы используете gmtime() для генерации новой строки даты. Если вы переключите это на localtime(), вы получите ответ, который вы хотите.