我从文件中提取一个日期,我使用此命令创建一个日期时间对象,然后向其添加 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 的形式得到它。 我怎样才能让它以我选择的模式返回。
strptime,因此默认情况下,DateTime::Format::Strptime 仅指示如何将输入解析为 DateTime 对象。日期时间对象默认为您看到的特定字符串化。为了以某种方式串化它,你可以使用它的strftime方法。
print $date_up1->strftime('%Y%m%d');
虽然 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("")
(在这种情况下最简单的)