使用perl将48小时添加到特定日期
我有一个格式为YYYY-MM-DD hh:MM:ss的日期,我想在此日期上再加48小时。例如,我有日期2018-02-05 12:00:00,我想在此日期上加48小时,以相同格式YYYY-MM-DD hh:MM:ss获得2018-02-05 12:00:00后48小时的日期。使用DateTime添加48小时使用perl将48小时添加到特定日期,perl,datetime,Perl,Datetime,我有一个格式为YYYY-MM-DD hh:MM:ss的日期,我想在此日期上再加48小时。例如,我有日期2018-02-05 12:00:00,我想在此日期上加48小时,以相同格式YYYY-MM-DD hh:MM:ss获得2018-02-05 12:00:00后48小时的日期。使用DateTime添加48小时 use strict; use warnings; use Time::Piece; use Time::Seconds; my $str = '2018-02-05 12:00:00'
use strict;
use warnings;
use Time::Piece;
use Time::Seconds;
my $str = '2018-02-05 12:00:00';
my $format = '%Y-%m-%d %H:%M:%S';
my $tp = localtime->strptime($str, $format);
$tp += ONE_HOUR * 48;
print $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 11:00:00
$dt->add( hours => 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 12:00:00
$dt->add( days => 2 );
要使用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 11:00:00
$dt->add( hours => 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 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;
要使用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 );
# 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 );
要使用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 11:00:00
$dt->add( hours => 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 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;
要使用Time::Piece添加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
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);
要使用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);
重要
一天*2
和一小时*48
之间没有区别
$ perl -MTime::Seconds -e'CORE::say( ONE_DAY * 2 )'
172800
$ perl -MTime::Seconds -e'CORE::say( ONE_HOUR * 48 )'
172800
然而,2天和48小时不是一回事。这就是为什么我们在添加天数时必须假装日期时间是UTC日期时间(即使不是)。处理混合量(如1天1小时)是不可能的
就我个人而言,我避免使用这个非常容易出错的模块
公共位:
use feature qw( say );
use Time::Piece qw( localtime );
use Time::Seconds qw( ONE_DAY ONE_HOUR );
my $format = '%Y-%m-%d %H:%M:%S';
...
要使用Time::Piece添加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
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);
要使用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);
重要
一天*2
和一小时*48
之间没有区别
$ perl -MTime::Seconds -e'CORE::say( ONE_DAY * 2 )'
172800
$ perl -MTime::Seconds -e'CORE::say( ONE_HOUR * 48 )'
172800
然而,2天和48小时不是一回事。这就是为什么我们在添加天数时必须假装日期时间是UTC日期时间(即使不是)。处理混合量(如1天1小时)是不可能的
就我个人而言,我避免使用这个非常容易出错的模块
公共位:
use feature qw( say );
use Time::Piece qw( localtime );
use Time::Seconds qw( ONE_DAY ONE_HOUR );
my $format = '%Y-%m-%d %H:%M:%S';
...
您的问题是什么?您必须使用支持日期数学的模块解析字符串,然后添加间隔并将日期转换回相同格式的字符串。您应该能够在Google或Stack Overflow搜索的帮助下找到所有这些步骤的解决方案。:)您想在哪个时区添加小时?您想添加48小时还是2天?不是每天都有24小时。你的问题是什么?你必须用支持日期数学的模块解析字符串,然后添加间隔并将日期转换回相同格式的字符串。您应该能够在Google或Stack Overflow搜索的帮助下找到所有这些步骤的解决方案。:)您想在哪个时区添加小时?您想添加48小时还是2天?不是每天都有24小时。不,我的评论是准确的。您的原始代码添加了2天。我已经修正了你的答案,所以它增加了48小时。不,我的评论是准确的。您的原始代码添加了2天。我已经修正了你的答案,使它增加了48小时。