当我使用格式字符串"%FT%T"和Time :: Piece-> strptime时,为什么会出现"Error Parsing Time"?

Bij*_*jan 4 perl datetime

我试图转换2015-09-11T04:00:00Time :: Piece对象.我试过了:

my $date = "2015-09-11T04:00:00";
my $t = Time::Piece->strptime($date, '%FT%T');
print $t->strftime('%F %T');
Run Code Online (Sandbox Code Playgroud)

但我明白了Error Parsing Time.我认为这是因为我正在寻找%FT%T并因为间距而导致问题.我该如何解决这个问题?

mel*_*ene 6

Time::Piece似乎在这个领域有一些错误.特别是,与其文档声称的不同,它认为这strptime %T相当于%B %e.

strftime %F并且%T也不适合我,但那可能是因为我在Windows上.

坚持标准格式规范工作正常,但:

my $date = "2015-09-11T04:00:00";
my $t = Time::Piece->strptime($date, '%Y-%m-%dT%H:%M:%S');
print $t->strftime('%Y-%m-%d %H:%M:%S'), "\n";
Run Code Online (Sandbox Code Playgroud)

  • 我想是时候发送拉取请求了. (3认同)
  • 这是一个烂摊子,`Time :: Piece`捆绑了一个来自BSD的strptime()的旧实现,它被硬编码为非数字组件使用英语,而strftime()方法使用你的libc实现并且适用于任何语言环境. (2认同)

Mat*_*cob 2

您是否考虑过放弃 Time::Piece 去做其他事情?例如, DateTime 的作用就如其上所说:

use strict;
use warnings;

use DateTime::Format::Strptime;

my $date = '2015-09-11T04:00:00';
my $strp = DateTime::Format::Strptime->new(pattern => '%FT%T');
my $dt = $strp->parse_datetime($date);

print $dt->datetime;  # prints 2015-09-11T04:00:00
Run Code Online (Sandbox Code Playgroud)

  • 是的,我最终这样做了。Datetime 实际上有一个模块 `DateTime::Format::ISO8601` (2认同)