【发布时间】:2019-02-28 10:03:30
【问题描述】:
我想转换以下时间格式- perl 中的 "2019-02-28T08:42:57+0000" 为 YYYY-MM-DD 格式
【问题讨论】:
-
好的,继续。你有没有考虑过这个?试过什么?请查看How to Ask 并通过tour 了解如何使用 Stack Overflow。我们不会为你做你的工作。
我想转换以下时间格式- perl 中的 "2019-02-28T08:42:57+0000" 为 YYYY-MM-DD 格式
【问题讨论】:
这里不需要日期模块。您想要的格式包含在您拥有的格式中。 substr 是您所要做的。 ISO 8601 日期的长度始终为 10 个字符,并且您从前面开始。
print substr $date, 0, 10;
【讨论】:
#!/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-%d\n");
exit 0;
试运行:
$ perl dummy.pl
2019-02-28
注意: 日期和时间解析是一个复杂的主题。所以请
【讨论】:
Date::Manip,而是更小的Date::Manip::Date。更新了我的答案。
在这种情况下,最简单的解决方案(正如 simbabque 已经指出的那样)是将日期视为字符串。除了给您提供的substr() 解决方案外,您还可以使用正则表达式删除“T”及其后面的所有内容。
$date =~ s/T.*$//;
如果您真的想解析和重新格式化日期,那么 Time::Piece 自 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;
【讨论】: