2014-11-21 84 views
-2

我想将日期时间格式转换为我想要的。如何在Perl中更改日期时间格式?

如何将日期时间格式从2014年11月21日15:04:32转换为2014-11-21 15:04:32?

感谢

+0

你想使用和日期模块或想在普通的Perl中做? – run 2014-11-21 05:19:52

+0

如何在普通perl中完成? – galuschka 2014-11-21 05:23:48

+0

'POSIX :: strftime()'在核心,是“纯”吗? – 2014-11-21 05:32:36

回答

1
my $str = 'Fri Nov 21 2014 15:04:32'; 
my @months =('jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec'); 
my ($day,$mon,$date,$year,$time) = split(' ',lc($str)); 
my %month_hash; 
@month_hash{@months} = (1 .. 12); 
print "$year-$month_hash{$mon}-$date $time"; 

试试这个的原油方法,但适用于您的需求。使用日期::操作灵活使用

+0

日期:Manip从来不是一个好建议。 Time :: Piece自2007年以来一直是核心Perl的一部分。 – 2014-11-21 11:14:54

+0

谢谢Dave我使用了Date :: Manip它后面很久,任何Time :: Piece将如何看看,再次感谢您的建议。 – run 2014-11-21 11:17:50

+2

任何解决方案,你开始必须建立自己的哈希或月份名称列表将是可怕的。有一些功能可以解析 - 在这里是'strptime'。如果你维护自己的哈希,它将不会正确地本地化。 – LeoNerd 2014-11-21 14:24:20

2

Time::Piece多年来一直是核心Perl。

使用strptime(字符串解析时间)解析您的日期/时间字符串。

使用strftime(字符串格式化时间)根据需要设置日期/时间的格式。

#!/usr/bin/perl 

use strict; 
use warnings; 
use 5.010; 
use Time::Piece; 

# Formats are defined in "man strftime" 
my $in_fmt = '%a %b %d %Y %H:%M:%S'; 
my $out_fmt = '%Y-%m-%d %H:%M:%S'; 

my $in_date = 'Fri Nov 21 2014 15:04:32'; 

my $date = Time::Piece->strptime($in_date, $in_fmt); 
my $out_date = $date->strftime($out_fmt); 

say $out_date;