简体   繁体   中英

How can I change date to swedish time zone in a Perl script?

How can I convert a date in format '20170119121941Z' to Swedish time zone in a Perl script?

My current snippet is:

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

}

The output you are getting is

Invalid date format: 20170119121941Z

Your code is failing with that message because 20170119121941Z doesn't match a valid ISO8601 format.

There's also the issue that you used strftime correctly twice, then did something nonsense for the third use.

Solution:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM