Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用perl将48小时添加到特定日期_Perl_Datetime - Fatal编程技术网

使用perl将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'

我有一个格式为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';
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小时。