2016-10-12 4 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で出力をしたいが、右PMにあなたがここに私を助けてくださいすることができます考えられて取得されていませんか?

+3

'$ string'をクリーンアップ版で上書きしますか?最初に '$ string'と' split'を '@ array'に見せても、まったく使わないのはなぜですか?それはちょうど混乱している。未使用の部品を[編集]して取り除いてください。取得した出力も含めてください。 – simbabque

答えて

4

Date :: Manipの代わりにTime::Pieceを使用したことがありますか?これはPerlディストリビューション(Perl 5.10以降)の一部であり、一般にDate :: Manipよりはるかに優れていると考えられています。

strptime()(文字列解析時間)を使用して、文字列をTime :: Pieceオブジェクトに変換し、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'); 

更新:そして、あなたの元の質問に答えるために、私はあなたが時間帯によって火傷ていると思います。 ParseDate()は、文字列がローカルタイムゾーンにあるとみなしているようですが、新しい日付文字列を生成するのにgmtime()を使用しています。 localtime()に切り替えると、必要な答えが得られます。

関連する問題