You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 14:45:01