目前我使用下面的今天日期。我需要使用这个今天的日期..我怎么能得到呢?
my $today = `date "+%Y-%m-%d"`;
Run Code Online (Sandbox Code Playgroud)
如果要昨天的日期:
use DateTime qw( );
my $yday_date =
DateTime
->now( time_zone => 'local' )
->set_time_zone('floating')
->truncate( to => 'days' )
->subtract( days => 1 )
->strftime('%Y-%m-%d');
Run Code Online (Sandbox Code Playgroud)
例如,在纽约,时间为2019-05-14 01:00:00,它将为2019-05-13。
例如,在纽约,时间为2019-11-04 00:00:00,它将为2019-11-03。
请注意,->now( time_zone => 'local' )->set_time_zone('floating')->truncate( to => 'days' )它用来代替->today( time_zone => 'local' )解决此问题。
如果要提前一天的时间:
use DateTime qw( );
my $yday_datetime =
DateTime
->now( time_zone => 'local' )
->subtract( days => 1 )
->strftime('%Y-%m-%d %H:%M:%S');
Run Code Online (Sandbox Code Playgroud)
例如,在纽约,时间为2019-05-14 01:00:00,它将为2019-05-13 01:00:00。
例如,在纽约,2019年3月10日12:00:00,它将给出2019年3月9日12:00:00。
例如,在纽约,于2019-03-11 02:30:00,它将给出错误。(2019-03-10 02:30:00因为切换到夏令时所以不存在。)
如果您希望时间早24小时:
use DateTime qw( );
my $yday_datetime =
DateTime
->now( time_zone => 'local' )
->subtract( hours => 24 )
->strftime('%Y-%m-%d %H:%M:%S');
Run Code Online (Sandbox Code Playgroud)
例如,在纽约,时间为2019-05-14 01:00:00,它将为2019-05-13 01:00:00。
例如,在纽约,2019年3月10日12:00:00,它将给出2019年3月9日11:00:00。
例如,在纽约,时间为2019-03-11 02:30:00,它将给出2019-03-10 01:30:00。
使用DateTime模块
use strict;
use warnings;
use feature 'say';
use DateTime;
my $today = DateTime->today(time_zone => 'local');
my $yesterday = $today->clone->add(days => -1);
say $yesterday->ymd; #--> 2019-05-13
Run Code Online (Sandbox Code Playgroud)
或直接
my $yesterday = DateTime->today(time_zone => 'local')->add(days => -1);
Run Code Online (Sandbox Code Playgroud)
现在,这些对象几乎可以与日期时间相关联。
为了提取在问题的格式使用字符串$yesterday->ymd自年月日的默认格式为%Y-%m-%d。实际上,可以使用strftime方法获得任意格式。
没有理由需要系统设施来完成这样的工作。更重要的是,该模块可满足各种奇怪的情况和需求,而且无与伦比。
例如:在某些日期时间,由于夏令时开始,某些时间段就不存在了。该文档提供了一个 2003-04-06 的示例,当时01:59:59“跳”到03:00:00,该小时消失了。该模块通过抛出错误来正确地尝试使用此类时间(不存在的时间)。
而且,如果您需要对日期进行任何处理,那么date甚至不能选择使用system的日期,因为您只能得到一个字符串,您必须手动对其进行解析以进行进一步的使用。
补充说,事实上,不仅是日期,还希望有时间。然后,例如
my $today = DateTime->now(time_zone => 'local');
say $today->strftime("%Y%m%d_%H.%M.%S"); #--> 20190522_22.44.23
my $yesterday = $today->clone->add(days => -1);
say $yesterday->strftime("%Y%m%d_%H.%M.%S"); #--> 20190521_22.44.23
Run Code Online (Sandbox Code Playgroud)
其中,方法现在 “保持”(本地)时,按照日期进行(today是truncate-ed now)。