如何在Perl脚本中将日期更改为瑞典时区?

时间:2017-05-23 18:50:38

标签: perl

如何在Perl脚本中将格式为'20170119121941Z'的日期转换为瑞典时区?

我目前的片段是:

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);

}

1 个答案:

答案 0 :(得分:4)

您获得的输出是

Invalid date format: 20170119121941Z

您的代码因该消息失败,因为20170119121941Z与有效的ISO8601格式不匹配。

还有两次正确使用strftime的问题,然后为第三次使用做了一些废话。

解决方案:

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