Perl 两个日期相减

标签 perl datetime

我对 Perl 还很陌生。 我正在尝试以这种格式减去两个日期

15.07.16 23:13:34
15.07.16 20:04:24

我知道我必须将此字符串转换为日期对象。我的问题是我只能使用基本的 perl,而无需安装额外的软件包。有办法做到吗?

我的版本是 v5.8.4,输出应该是 03:09:10

最佳答案

您说您正在使用 Perl 5.8.4。您确实需要更新并能够安装 CPAN 模块。

但是,这里有一种仅使用 5.8.4 中提供的核心 Perl 功能即可完成您想要的操作的方法。

#!/usr/bin/perl

use strict;
use warnings;
use Time::Local;

my $date1 = '15.07.16 23:13:34';
my $date2 = '15.07.16 20:04:24';

my $diff = date2sec($date1) - date2sec($date2);

print secs2duration($diff);

sub date2sec {
  my ($date) = @_;

  my ($day, $mon, $yr, $hr, $min, $sec) = split(/[. :]/, $date);

  # I've assumed that your timestamps are in your local timezone,
  # so I've used timelocal() here. If your timestamps are actually
  # UTC, you should use timegm() instead.
  return timelocal($sec, $min, $hr, $day, $mon-1, 2000 + $yr);
}

sub secs2duration {
  my ($secs) = @_;

  my $hours = int($secs / (60*60));
  $secs %= (60*60);
  my $mins = int($secs / 60);
  $secs %= 60;

  return sprintf '%02d:%02d:%02d', $hours, $mins, $secs;
}

关于Perl 两个日期相减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40279955/

相关文章:

Perl - HTTP::Proxy 捕获 XHR/JSON 通信

linux - 合并具有相似列条目的两个文件

perl - 跨 Catalyst 应用程序共享身份验证

perl - 如何在perl中查找重复的数组值

MySQL - 如何从 rss 提要转换日期时间

jquery - 如何在 Kendo 日期时间选择器中将默认日期时间设置为空

iPhone 当前时区与 UTC 的偏移

python - Matplotlib 中 X 轴中的换行符导致不希望的窗口大小调整/跳跃/闪烁行为

java - java.time.LocalDateTime 和 java.util.Date 之间的转换

perl - 如何将 __DATA__ 读入数组以便每个单词都有自己的索引?