Perl如何将带pm的12小时制日期转换为24小时制gmtime格式
Perl 12小时制日期转24小时制实现方案
你原代码存在两处核心错误:
qw[$date]用法错误:qw()会将内部内容按字面量解析为字符串列表,不会识别变量,你写的qw[$date]实际得到的是字符串'$date',而非变量存储的日期值,不需要额外用qw包裹变量。strptime输入格式符不匹配:待解析的日期结构为「英文月份缩写 日期 四位数年份 12小时制时间+am/pm标识」,你使用的%H%p完全无法匹配该结构,正确的格式符组合为%b %d %Y %I:%M%p:%b:匹配英文月份缩写(如Jun)%d:匹配两位数日期%Y:匹配四位数年份%I:匹配12小时制的小时数(不能用24小时制解析符%H)%M:匹配分钟数%p:匹配am/pm标识
可运行正确代码
#!/usr/bin/perl use strict; use warnings; use feature 'say'; # 如需兼容非英文 locale 可打开下方两行注释 # use POSIX; # POSIX::setlocale(POSIX::LC_TIME, 'en_US.UTF-8'); use Time::Piece; my $date = "Jun 19 2019 11:08pm"; # 按输入结构解析日期 my $time = Time::Piece->strptime($date, '%b %d %Y %I:%M%p'); # 输出指定格式的24小时制日期 say $time->strftime('%b %d %Y %H:%M');
运行上述代码即可得到预期输出Jun 19 2019 23:08。
内容的提问来源于stack exchange,提问作者Apfelkuchen
相关产品推荐
相关产品推荐

