我想转换以下时间格式 - " 2019-02-28T08:42:57 0000" to perl
您在这里不需要日期模块。您想要的格式包含在您所拥有的格式。substr
就是您要做的。ISO 8601日期始终为10个字符,您从正面开始。
print substr $date, 0, 10;
最简单的解决方案在这种情况下(如Simbabque已经指出)就是将日期视为字符串。除了您给出的substr()
解决方案外,您还可以使用正则判断删除" T"及其之后的所有内容。
$date =~ s/T.*$//;
如果您真的想解析和重新格式化日期,则自2007年以来已包含在标准Perl分布中的时间::。
use Time::Piece;
$date = '2019-02-28T08:42:57+0000';
my $tp = Time::Piece->strptime($date, '%Y-%m-%dT%H:%M:%S%z');
say $tp->strftime('%Y-%m-%d');
对于更复杂的日期和时间处理(这里不需要,但我将其包括在内),您应该阅读DateTime及其朋友。
use DateTime;
use DateTime::Format::Strptime;
my $parser = DateTime::Format::Strptime->new(
pattern => '%Y-%m-%dT%H:%M:%S%z',
);
my $date = '2019-02-28T08:42:57+0000';
my $dt = $parser->parse_datetime($date);
say $dt->strftime('%Y/%m/%d');
请尝试一下:
use Date::Parse qw(str2time);
use Date::Format qw(time2str);
my $string = '2019-02-28T08:42:57+0000';
my $time = str2time($string);
my $date = time2str("%Y-%m-%d %H:%M:%S", $time);
print $date;
with date :: manip:
#!/usr/bin/perl
use warnings;
use strict;
use Date::Manip:.Date;
my $date = new Date::Manip::Date;
$date->parse("2019-02-28T08:42:57+0000")
and die "parse" . $date->err() . "n";
print $date->printf("%Y-%m-%dn");
exit 0;
测试运行:
$ perl dummy.pl
2019-02-28
注意:日期和时间解析是一个复杂的主题。所以请
- 选择一个适当的模块而不是编码自己的解析器
- do 研究您为任务选择的模块的文档