日期时间 strptime 返回错误的模式



我从文件中提取一个日期,我使用此命令创建一个日期时间对象,然后向其添加 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("")(在这种情况下最简单的)

最新更新