以下情况。
我有一个名为的文件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");
Run Code Online (Sandbox Code Playgroud)
输出量
03/12/2018
Run Code Online (Sandbox Code Playgroud)
在那之后,我想得到今天的日期-14天。但是,这是我的两个问题之一。我尝试了很多事情,但找不到任何适合我的真正解决方案。
my $day14 = DateTime->now();
$day14 -= (2 * ONE_WEEK);
Run Code Online (Sandbox Code Playgroud)
错误:
无法从DateTime对象中减去1209600(DateTime = HASH(0x6f2d84))。只能从DateTime对象中减去DateTime :: Duration或DateTime对象。
现在第二个问题是,我想比较这两个日期,并查看文件日期是否在范围内。
my $cmp = DateTime->compare($chars, $day14);
Run Code Online (Sandbox Code Playgroud)
错误:
参数“ 15/07/2019”不是数字等式(==)中的数字
一个DateTime对象只能与另一个DateTime对象进行比较(03/12/2018,15/07/2019)。
那么,如何从今天的日期减去14天,又如何比较之后的两个日期?
You're slightly muddling up two Date/Time ecosystems that don't work well together.
You can do this using Time::Piece and 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');
Run Code Online (Sandbox Code Playgroud)
Output:
03/12/2018
19/11/2018
Run Code Online (Sandbox Code Playgroud)
Or you can do it using DateTime and friends.
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');
Run Code Online (Sandbox Code Playgroud)
Output:
03/12/2018
19/11/2018
Run Code Online (Sandbox Code Playgroud)
As for your last question, you can compare either Time::Piece objects or DateTime objects using the standard Perl comparison operators (<, ==, >=, etc). But you have to compare two objects of the same type.
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |