gpt4 book ai didi

perl - 从今天减去天数并比较

转载 作者:行者123 更新时间:2023-12-02 06:46:58 24 4
gpt4 key购买 nike

如下情况。

我有一个名为 2018_12_03_FileName.log 的文件。现在我从文件中获取日期 (2018_12_03)。

我想将字符串转换为 DateTime 对象,这也可以。

$chars =~s/_//g;
$chars = Time::Piece->strptime("$chars", "%Y%m%d");
$chars = $chars->strftime("%d/%m/%Y");

输出

03/12/2018

之后我想得到今天的日期 - 14 天。但这是我的两个问题之一。我尝试了很多方法,但找不到任何适合我的真正解决方案。

my $day14 = DateTime->now();
$day14 -= (2 * ONE_WEEK);

错误:

Cannot subtract 1209600 from a DateTime object (DateTime=HASH(0x6f2d84)). Only a DateTime::Duration or DateTime object can be subtracted from a DateTime object.

现在第二个问题是,我想比较这两个日期,看看文件日期是否在范围内。

my $cmp = DateTime->compare($chars, $day14);

错误:

Argument "15/07/2019" isn't numeric in numeric eq (==) at

A DateTime object can only be compared to another DateTime object (03/12/2018, 15/07/2019).

那么如何从今天减去 14 天,以及如何比较这两个日期之后的日期?

最佳答案

您有点混淆了两个不能很好协同工作的日期/时间生态系统。

您可以使用 Time::Piece 和 Time::Seconds 来做到这一点。

use feature 'say';
use Time::Piece;
use Time::Seconds;

my $chars = '2018_12_03';

my $tp = Time::Piece->strptime($chars, '%Y_%m_%d');

my $date14 = $tp - (2 * ONE_WEEK);

say $tp->strftime('%d/%m/%Y');
say $date14->strftime('%d/%m/%Y');

输出:

03/12/2018
19/11/2018

或者您可以使用 DateTime 和 friend 来完成。

use feature 'say';
use DateTime;
use DateTime::Format::Strptime;

my $date_parser = DateTime::Format::Strptime->new(
pattern => '%Y_%m_%d',
on_error => 'croak',
);

my $chars = '2018_12_03';

my $dt = $date_parser->parse_datetime($chars);

my $date14 = $dt->clone->subtract( weeks => 2 );

say $dt->strftime('%d/%m/%Y');
say $date14->strftime('%d/%m/%Y');

输出:

03/12/2018
19/11/2018

关于您的最后一个问题,您可以使用标准的 Perl 比较运算符( <==>= 等)来比较 Time::Piece 对象或 DateTime 对象。但是你必须比较两个相同类型的对象。

关于perl - 从今天减去天数并比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57040062/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com