我想用一种简单的方法将昨天的日期(本地时间)作为Perl脚本中的字符串。最好,我想这样做没有模块依赖,因为我们有一个简单的Perl 5.12安装。
所以,比如:
my $yesterdays_date=...; # Puts for example '301011' into $yesterdays_date,
# if today is October 31st, 2011
答案 0 :(得分:13)
Time::Piece
是核心:
use Time::Piece;
use Time::Seconds qw(ONE_DAY);
my $yesterday = localtime() - ONE_DAY();
print $yesterday->strftime('%d%m%y'), "\n";
如果您担心夏令时,可以将当前时间标准化为中午附近:
use Time::Piece;
use Time::Seconds qw(ONE_DAY ONE_HOUR);
my $today = localtime;
my $yesterday = $today + ONE_HOUR * ( 12 - $today->hour ) - ONE_DAY;
print $yesterday->strftime("%d%m%y"), "\n";
如果您可以使用依赖项,请使用DateTime
:
use DateTime;
print DateTime->now->subtract(days => 1)->strftime('%d%m%y'), "\n";
答案 1 :(得分:13)
如果您愿意使用依赖项,DateTime通常会执行您需要的任何操作。
use strict;
use warnings;
use 5.012;
use DateTime;
say DateTime->now->subtract(days => 1)->strftime('%d%m%y');
答案 2 :(得分:1)
您可以这样使用POSIX模块:
perl -MPOSIX=strftime -le 'print strftime "%m%d%y",localtime(time-(60*60*24))'
答案 3 :(得分:0)
从当前时间减去24小时(24小时* 60分钟* 60秒)并获得当地时间:
say scalar localtime(time - 60*60*24);
# Sun Oct 30 21:04:30 2011
注意,localtime
仅在标量上下文中以字符串格式返回时间。
如果您需要生成'DDMMYY',您可以使用列表上下文返回的数据结构:
my @tm = localtime(time - 60*60*24);
my $date = sprintf("%02d%02d%2d", $tm[3], $tm[4]+1, $tm[5] + 1900);
# 30102011