我有一个看起来像的时间戳25-OCT-10 04.11.00.000000 AM.我正在尝试将其转换为时间格式
Time::Piece->strptime("25-OCT-10 04.11.00.000000 AM","%d-%b-%y %I.%M.%S.%6N %p")
Run Code Online (Sandbox Code Playgroud)
但它一直在抛出错误.我试过%OS,%SZ.他们似乎没有工作.有人能告诉我我做错了什么吗?
cjm*_*cjm 12
Time :: Piece不支持亚秒次.请尝试使用DateTime,例如,DateTime :: Format :: Strptime:
use DateTime::Format::Strptime;
my $parser = DateTime::Format::Strptime->new(
pattern => '%d-%b-%y %I.%M.%S.%6N %p',
);
my $dt = $parser->parse_datetime("25-OCT-10 04.11.00.000000 AM");
Run Code Online (Sandbox Code Playgroud)
strptime不会读那个.strptime与只下降到整数秒的结构工程,并且它不具有识别非整数NUMERICS任何格式-有没有这样的格式N中Time::Piece的strptime.如果你知道你总是期待.000000几微秒,那么你可以尝试使用..."%I.%M.%S.000000 %p",否则strptime只是不适合你.
如何日期时间::格式:: CLDR?格式"dd-MMM-yy hh.mm.ss.SSSSSS a"似乎与该格式完美配合.
use DateTime::Format::CLDR;
my $parser = DateTime::Format::CLDR->new(
pattern => "dd-MMM-yy hh.mm.ss.SSSSSS a",
locale => "en_US",
);
my $dt = $parser->parse_datetime("25-OCT-10 04.11.00.000100 AM");
say $dt->iso8601; # 2010-01-25T04:11:00
Run Code Online (Sandbox Code Playgroud)
编辑:只是注意到,如果它们都是大写的,它就无法正确识别月份 - 它识别"十月"但不识别"OCT".这里有一个固定版本,已经发送到上游进行合并:)
更新: DateTime :: Format :: CLDR 1.11正确区分大小写.