-1

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

请建议我能做些什么

4

3 回答 3

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 库。

于 2013-10-02T09:31:00.947 回答
1

在您的示例中,$date是标量,而不是对象。它没有方法strftime(因此错误说没有包或对象引用)。正如ikegami 所说,如果您只想在字符串中添加秒数,请将它们附加到.运算符中。不要用大锤敲碎坚果。

如果你对格式做的事情不那么简单,你可以用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
于 2013-10-01T19:36:33.150 回答
1

要将日期从一种格式转换为另一种格式,通常将原始表示解析为其部分,然后将它们格式化为所需的表示。但是,在这种情况下,所缺少的只是秒数,因此您只需要以下内容:

 my $new_date = $date . ':00';
于 2013-10-01T18:44:06.423 回答