我试图在数据字符串上使用 strftime :
my $date = '2013-10-31 13:55';
my $new_date = $date->strftime('%Y-%m-%d %H:%M:%S');
但我总是得到错误
"Can't call method "strftime" without a package or object reference"
请建议我能做些什么
正如其他人所指出的那样,您可能会通过尝试在strftime()
此处使用来过度复杂化。您也有一个误解,您试图在不包含对象的变量上调用方法。
我想也许你正试图写这样的东西。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Time::Piece;
# The original date as a string
my $date_str = '2013-10-31 13:55';
# Parse the date string and create a Time::Piece object
my $date = Time::Piece->strptime($date_str, '%Y-%m-%d %H:%M');
# Create a new (improved!) date string using strftime()
my $new_date = $date->strftime('%Y-%m-%d %H:%M:%S');
say $new_date;
Time::Piece多年来一直是标准 Perl 库。
在您的示例中,$date
是标量,而不是对象。它没有方法strftime
(因此错误说没有包或对象引用)。正如ikegami 所说,如果您只想在字符串中添加秒数,请将它们附加到.
运算符中。不要用大锤敲碎坚果。
如果你对格式做的事情不那么简单,你可以用DateTime和DateTime::Format::Strptime做这样的事情:
use DateTime;
use DateTime::Format::Strptime;
my $date = '2013-10-31 13:55';
my $parser = DateTime::Format::Strptime->new(pattern => '%Y-%m-%d %H:%M');
# Parse string into a DateTime object
my $dt = $parser->parse_datetime($date);
# Print DateTime object with a custom format
print $dt->strftime('%a, %d %b %Y %H:%M:%S %z');
# Thu, 31 Oct 2013 13:55:00 +0000
要将日期从一种格式转换为另一种格式,通常将原始表示解析为其部分,然后将它们格式化为所需的表示。但是,在这种情况下,所缺少的只是秒数,因此您只需要以下内容:
my $new_date = $date . ':00';