2017-05-23 10 views
-1

「20170119121941Z」という形式の日付をPerlスクリプトのスウェーデンのタイムゾーンに変換するにはどうすればよいですか?Perlスクリプトでスウェーデンのタイムゾーンに日付を変更するにはどうすればよいですか?

私の現在の抜粋です:

sub get_Date { 

my $content = shift; 

my $iso8601 = DateTime::Format::ISO8601 -> new; 
my $dt = $iso8601->parse_datetime($content); 
###Set the time zone to "Europe/Stockholm" . 
$dt->set_time_zone("Europe/Stockholm"); 
my $dayofmonth = $dt->strftime("%d"); 
$dayofmonth =~ s/^0//; 
my $hour = $dt->strftime("%I"); 
$hour =~ s/^0//; 
my $ISODate = $dt->strftime("%b " . $dayofmonth . ", %Y, " . $hour . ":%M %p ", localtime(time)); 
return($ISODate); 

} 
+0

あなたのコードでは、あなたの質問に矛盾します。 –

答えて

4

あなたが取得している出力が20170119121941Zが有効なISO8601フォーマットと一致しないので、あなたのコードは、そのメッセージで失敗している

Invalid date format: 20170119121941Z 

です。

strftimeを正しく2回使用し、3回目の使用にナンセンスを行ったという問題もあります。

ソリューション:

use strict; 
use warnings; 
use feature qw(say state); 

use DateTime::Format::Strptime qw(); 

sub localize_dt_str { 
    my ($dt_str) = @_; 

    state $format = DateTime::Format::Strptime->new(
     pattern => '%Y%m%d%H%M%S%Z', 
     on_error => 'croak', 
    ); 

    my $dt = $format->parse_datetime($dt_str); 
    $dt->set_time_zone('Europe/Stockholm'); 
    return $dt->strftime('%b %e, %Y, %l:%M %p'); 
} 

say localize_dt_str('20170119121941Z'); # Jan 19, 2017, 1:19 PM 
関連する問題