Perl - 日期计算

时间:2015-12-06 21:22:33

标签: perl

我是Perl的新手。我想在输入后计算天数(例如5天)。

我需要涵盖的步骤:
 1. start_date:08.12.2015
 2.加5天
 3.结束日期:?

我的想法是将开始日期转换为时间戳。然后我加5 * 84.400秒。之后,我想重新转换结束时间戳。

我阅读了Time::Local模块文档,但我还没有理解逻辑。

这是处理日期计算的正确方法吗?

3 个答案:

答案 0 :(得分:5)

您可以使用DateTimeDateTime::Format::Strptime来完成此操作。像这样:

use strict;
use DateTime;
use DateTime::Format::Strptime;

my $strp = DateTime::Format::Strptime->new(
    pattern => '%d.%m.%Y'
);

my $date = '08.12.2015';
my $dt = $strp->parse_datetime($date);
printf "%s -> %s\n", $date, $dt->add(days => 5)->strftime("%d.%m.%Y");

答案 1 :(得分:4)

使用Time::Piece

#!/usr/bin/env perl

use v5.10;

use Time::Piece;
use Time::Seconds;

my $date_string = '08.12.2015';
my $date_format = '%m.%d.%Y';

my $tp = Time::Piece->strptime( $date_string, $date_format );

$tp += 5 * ONE_DAY;

say $tp->strftime($date_format);

输出:

08.17.2015

答案 2 :(得分:0)

或者另一种方式,在vanilla perl中(不需要使用包),在Unix date的帮助下:

$ date -d 08/12/2015
Wed, Aug 12, 2015 12:00:00 AM

$ date -d 08/12/2015 +%s
1439352000

$ date -d 08/12/2015 +%s|perl -ne 'print scalar localtime $_ + 5*24*60*60'
Mon Aug 17 00:00:00 2015