Как бы ни было заманчиво просто вычесть день из числа секунд из текущего времени, бывают случаи, когда это дает неправильный ответ (високосные секунды, летнее время и, возможно, другие).Мне легче позволить strftime
(доступно в модуле ядра Perl 5 POSIX
) позаботиться обо всем этом для меня.
#!/usr/bin/perl
use strict;
use warnings;
use Time::Local;
use POSIX qw/strftime/;
#2010-03-15 02:00:00
my ($s, $min, $h, $d, $m, $y) = (0, 0, 0, 15, 2, 110);
my $time = timelocal $s, $min, $h, $d, $m, $y;
my $today = strftime "%Y-%m-%d %T", localtime $time;
my $yesterday = strftime "%Y-%m-%d %T", $s, $min, $h, $d - 1, $m, $y;
my $oops = strftime "%Y-%m-%d %T", localtime $time - 24*60*60;
print "$today -> $yesterday -> $oops\n";