我从文件中提取日期,并通过使用此命令创建一个datetime对象,然后向其添加1以获取下一个日期。
my $parseit = DateTime::Format::Strptime->new(pattern => '%Y%m%d');
my $lastdate = "20190115";
my $tempdate = $parseit->parse_datetime($lastdate);
my $date_up1 = $tempdate->add(days => 1);
但是在打印变量$ date_up1时,我总是以%Y-%m-%d的形式获取它。我如何才能将其返回到我选择的模式中。
答案 0 :(得分:2)
strptime以及DateTime :: Format :: Strptime仅指示如何将输入解析为DateTime对象。 DateTime对象默认为您看到的特定字符串。为了以某种方式对其进行字符串化,可以使用其strftime方法。
print $date_up1->strftime('%Y%m%d');
答案 1 :(得分:1)
虽然DateTime :: Format :: Strptime可用于解析和格式化日期时间,但它并没有将自己设置为它按预期创建的DateTime对象的默认格式化程序。您可以通过添加以下内容来明确地做到这一点:
$tempdate->set_formatter($parseit);
清理代码后,如下所示:
my $date = "20190115";
my $format = DateTime::Format::Strptime->new(
pattern => '%Y%m%d',
on_error => 'croak',
);
my $dt = $format->parse_datetime($date);
$dt->set_formatter($format);
$dt->add( days => 1 );
say $dt;
或者,以下所有工作都无需设置格式化程序:
$format->format_datetime($dt)
$dt->strftime("%Y%m%d")
(最灵活,但在这种情况下会引入重复的代码)$dt->ymd("")
(在这种情况下最简单)