如何在Perl中计算日期差值并转换为小时、分钟单位
问题原因
你写的代码直接对日期格式的字符串执行减法运算会报错,是因为Perl不会自动识别字符串里的日期结构,做算术运算时会尝试把字符串转为数字,最终只会提取到开头的2021数值,不仅计算结果完全错误,还会抛出「字符串不是合法数字」的警告。
解决方案
推荐用Perl 5.10之后自带的核心模块Time::Piece实现,不需要额外安装第三方依赖,代码示例如下:
use strict; use warnings; use Time::Piece; my $datecreated = '2021-09-06 04:52:38'; my $dateresolved = '2021-09-06 04:52:48'; # 按给定格式解析日期字符串为时间对象 my $create_time = Time::Piece->strptime($datecreated, '%Y-%m-%d %H:%M:%S'); my $resolve_time = Time::Piece->strptime($dateresolved, '%Y-%m-%d %H:%M:%S'); # 计算差值,单位为秒 my $time_elapsed = $resolve_time - $create_time; # 转换为小时、分钟、剩余秒数 my $hours = int($time_elapsed / 3600); my $minutes = int(($time_elapsed % 3600) / 60); my $seconds = $time_elapsed % 60; # 按需调整输出格式即可 printf "时间差:%d小时 %d分钟 %d秒\n", $hours, $minutes, $seconds;
代码说明
strptime方法的第二个参数是日期格式匹配规则,和你用到的年-月-日 时:分:秒格式完全对应,如果后续日期格式变化调整对应匹配符即可- 两个
Time::Piece对象相减直接返回相差的秒数,后续只需要做简单的除法取整就能转换为你需要的小时、分钟单位
内容的提问来源于stack exchange,提问作者blizzy
相关产品推荐
相关产品推荐

