使用perl Date :: Manip将一种日期格式转换为另一种格式

时间:2016-10-12 09:47:58

标签: perl date datetime perl-module

我正在尝试将传入日期转换为另一种格式,下面是我编写的代码。

#!/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上的输出没有得到考虑可以请你帮我吗?

1 个答案:

答案 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(),您将获得所需的答案。