我试图在数据字符串上使用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"
请建议我能做些什么
答案 0 :(得分:2)
正如其他人所指出的那样,通过尝试在这里使用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库。
答案 1 :(得分:1)
要将日期从一种格式转换为另一种格式,通常会将原始表示形式解析为其部分,然后将它们格式化为所需的表示形式。但是,在这种情况下,所有缺少的都是秒,所以您只需要以下内容:
my $new_date = $date . ':00';
答案 2 :(得分:1)
在您的示例中,$date
是标量,而不是对象。它没有方法strftime
(因此错误说没有包或对象引用)。如ikegami said所示,如果您要尝试的只是为字符串添加秒数,请使用.
运算符附加它们。不要用大锤敲打坚果。
如果您对格式做了一些不那么重要的事情,可以使用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