寻找以DDMMYY格式生成昨天日期的Perl 5.12代码

时间:2011-10-31 18:50:42

标签: perl

我想用一种简单的方法将昨天的日期(本地时间)作为Perl脚本中的字符串。最好,我想这样做没有模块依赖,因为我们有一个简单的Perl 5.12安装。

所以,比如:

my $yesterdays_date=...; # Puts for example '301011' into $yesterdays_date, 
                         # if today is October 31st, 2011

4 个答案:

答案 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