将此时间格式"2019-02-28T08:42:57+0000"转换为 perl 中的 YYYY-MM-DD 格式



我想转换以下时间格式 - " 2019-02-28T08:42:57 0000" to perl

中的yyyy-mm-dd格式

您在这里不需要日期模块。您想要的格式包含在您所拥有的格式。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 研究您为任务选择的模块的文档

最新更新