如何使用Time :: Piece strptime解析微秒?

Aks*_*Aks 3 perl

我有一个看起来像的时间戳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)


hob*_*bbs 5

strptime不会读那个.strptime与只下降到整数秒的结构工程,并且它不具有识别非整数NUMERICS任何格式-有没有这样的格式NTime::Piecestrptime.如果你知道你总是期待.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正确区分大小写.