使用perl将48小时添加到特定日期

时间:2018-02-06 22:30:08

标签: perl datetime

我的日期格式为YYYY-MM-DD hh:mm:ss,我希望在这个日期增加48小时。例如我的日期是2018-02-05 12:00:00,我希望在此日期加48小时,以2018-02-05 12:00:00的格式获得相同格式的日期YYYY-MM -DD hh:mm:ss?

3 个答案:

答案 0 :(得分:3)

使用DateTime添加48小时,

# In America/New_York,
# 2018-02-05 12:00:00 ⇒ 2018-02-07 12:00:00
# 2018-11-03 12:00:00 ⇒ 2018-11-05 11:00:00
$dt->add( hours => 48 );

使用DateTime添加2天

# In America/New_York,
# 2018-02-05 12:00:00 ⇒ 2018-02-07 12:00:00
# 2018-11-03 12:00:00 ⇒ 2018-11-05 12:00:00
$dt->add( days => 2 );

如何解析和格式化:

use DateTime::Format::Strptime qw( );

my $format = DateTime::Format::Strptime->new(
   pattern   => '%Y-%m-%d %H:%M:%S',
   time_zone => 'local',
   on_error  => 'croak',
);

my $dt = $format->parse_datetime('2018-02-05 12:00:00');
$dt->set_formatter($format);  # Automatically format correctly on stringification.

...

say $dt;

答案 1 :(得分:2)

https://<servername>/zabbix/zabbix.php?action=dashboard.view
https://<servername>/zabbix/index.php
http://<servername>/zabbix/api_jsonrpc.php

答案 2 :(得分:-1)

使用Time :: Piece,

添加48小时
test

使用Time :: Piece,

添加2天
# In America/New_York,
# 2018-02-05 12:00:00 ⇒ 2018-02-07 12:00:00
# 2018-11-03 12:00:00 ⇒ 2018-11-05 11:00:00

my $tp = localtime->strptime($timestamp, $format);
$tp += ONE_HOUR * 48;  # Or:  $tp += ONE_DAY * 2;
say $tp->strftime($format);

重要

# In America/New_York, # 2018-02-05 12:00:00 ⇒ 2018-02-07 12:00:00 # 2018-11-03 12:00:00 ⇒ 2018-11-05 12:00:00 my $tp = Time::Piece->strptime($timestamp, $format); # Pretend the dt is UTC even if local! $tp += ONE_DAY * 2; # Or: $tp += ONE_HOUR * 48; say $tp->strftime($format); ONE_DAY * 2之间没有区别。

ONE_HOUR * 48

然而,2天和48小时不一样。这就是为什么我们必须在添加天数时假装日期时间是UTC日期时间(即使它不是)。处理混合金额(例如1天和1小时)是不可能的。

就个人而言,我避免使用这个容易出错的模块。

公共位:

$ perl -MTime::Seconds -e'CORE::say( ONE_DAY * 2 )'
172800

$ perl -MTime::Seconds -e'CORE::say( ONE_HOUR * 48 )'
172800