我正在尝试将传入日期转换为另一种格式,下面是我编写的代码。
#!/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上的输出没有得到考虑可以请你帮我吗?
答案 0 :(得分:4)
您是否考虑过使用Time::Piece代替Date :: Manip?它是标准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()
,您将获得所需的答案。