PERL:我从locatime中得出mday的价值,如下如何从本地时间的mday中减去1

问题描述

PERL:我从locatime中获取mday的值,如下所示,现在我想要前一天的值。我该如何从本地时间的mday中减去1

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
my $part = "P".$mday;

print "Today value is $part \n";

my $part_yes = "P".$mday - $num;

print "$part_yes \n";

解决方法

使用DateTime:

my $dt =
   DateTime
   ->now( time_zone => 'local' )
   ->set_time_zone('floating')  # Do this when working with dates.
   ->truncate( to => 'days' );  # Optional.

$dt->subtract( days => 2 );

my $yesterday = $dt->day;

DateTime非常繁重,似乎人们总是问日期时间问题,然后总是说“仅限核心模块!”,所以这是仅使用核心模块的解决方案。

use Time::Local qw( timegm );

# Create an timestamp with the same date in UTC as the one local one.
my $epoch = timegm(0,( localtime() )[3,4,5]);

# We can now do date arithmetic without having to worry about DST switches.
$epoch -= 2 * 24*60*60;

my $yesterday = ( gmtime($epoch) )[3] + 1;
,
apt-get -y install python3-pip

警告(ikegami评论):并非全天都有24小时。可能会提前0天,1天或2天产生结果

https://perldoc.perl.org/functions/time
https://perldoc.perl.org/functions/localtime