在日期尝试使用'strftime'时出错

时间:2013-10-01 18:15:41

标签: perl datetime strftime

我试图在数据字符串上使用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"

请建议我能做些什么

3 个答案:

答案 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所示,如果您要尝试的只是为字符串添加秒数,请使用.运算符附加它们。不要用大锤敲打坚果。

如果您对格式做了一些不那么重要的事情,可以使用DateTimeDateTime::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