Perl 为什么我会得到;错误分析时间“;当我使用格式字符串";%英尺%T“;随时间::件->;时间?

Perl 为什么我会得到;错误分析时间“;当我使用格式字符串";%英尺%T“;随时间::件->;时间?,perl,datetime,Perl,Datetime,我正在尝试将2015-09-11T04:00:00转换为对象。我试过: my $date = "2015-09-11T04:00:00"; my $t = Time::Piece->strptime($date, '%FT%T'); print $t->strftime('%F %T'); 但是我得到了错误解析时间。我想这是因为我正在寻找%FT%T,这会因为间距而导致问题。如何修复此问题?Time::Piece在这方面似乎有一些缺陷。特别是,它认为与它的文档声称的不同,strtim

我正在尝试将
2015-09-11T04:00:00
转换为对象。我试过:

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

但是我得到了
错误解析时间
。我想这是因为我正在寻找
%FT%T
,这会因为间距而导致问题。如何修复此问题?

Time::Piece
在这方面似乎有一些缺陷。特别是,它认为与它的文档声称的不同,
strtime
%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";

你有没有考虑过放弃时间去做其他事情,例如,它在tin上显示的内容:

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

文档似乎暗示这应该可行,但对我来说也不行。我必须使用
Time::Piece->strtime($date,%Y-%m-%dT%H:%m:%S')
来获取要分析的日期
man strTime
%F
应该等于
%Y-%m-%d
%T
应该等于
%H:%m:%S
。。。所以这很奇怪。我总是在
%F
格式说明符中遇到这个错误。我认为Time::Piece有平台特定的差异,因此它可能在某些系统上工作。“就像手册页”文档有点乐观。@JimDavis毕竟他们是从FreeBSD实现strTime的。但除非你真的在运行BSD,否则我认为time.h和其他东西可能会有所不同,所以你会得到这样的东西。是的,我最终就是这么做的。Datetime实际上有一个模块
Datetime::Format::ISO8601
甚至更好!我想我应该在发布我的答案之前检查一下,但我不知道你是否有多种格式需要解析,或者只有一种格式。我想是时候发送拉取请求了。这真是一团糟,
time::Piece
捆绑了来自BSD的strtime()的一个旧实现,该实现硬编码为非数字组件使用英语,而strftime()方法使用libc的实现,并且是任何区域设置的主题。