问题描述
我已经看到其他答案,但是由于某些原因他们并不适合我。
I've seen other answers, but they're not working for me for some reason.
我试图用Perl脚本中的日期以下代码。
I'm trying to get yesterday's date in a Perl script using the following code.
为了将来参考,今天的日期是2015年11月12日
For future reference, today's date is November 12, 2015
my (undef, undef, undef, $mday,$mon,$year) = localtime();
my $prev_day = timelocal(0, 0, 0, $mday-1, $mon, $year);
(undef, undef, undef, $mday,$mon,$year) = localtime($prev_day);
$year += 1900;
print "Yesterday's Day: $mday, Month: $mon, Year: $year\n";
除了我的输出看起来像这样
Except my output looks like this
Yesterday's Day: 11, Month: 10, Year: 2015.
我应该阅读昨天的日期为 Day:11,Month:11,Year:2015
。为什么要扣除这个月份?
I should be reading yesterday's date as Day: 11, Month: 11, Year: 2015
. Why is the month being subtracted?
编辑:这不同于建议的答案,因为我想知道为什么当地时间似乎写错了一个月。 >
This is different than the suggested answer because I'm wondering why local time seems to be writing the wrong month.
推荐答案
的文档说这个
The documentation for localtime
says this
所以要得到一个月的数字为1,您需要 $ mon + 1
,或者您只需将一个添加到 $ mday
在你添加1900到$ code> $ year的同一时间
So to get a month number with 1 for January you need $mon+1
, or you can just add one to $mday
at the same time as you add 1900 to $year
像这样
use strict;
use warnings 'all';
use Time::Local;
my ($y, $m, $d) = (localtime)[5,4,3];
my $yesterday = timelocal(0, 0, 0, $d-1, $m, $y);
($y, $m, $d) = (localtime($yesterday))[5,4,3];
$y += 1900;
++$m;
print "Yesterday's Day: $d, Month: $m, Year: $y\n";
输出
output
Yesterday's Day: 11, Month: 11, Year: 2015
更好的方法是使用核心库 Time :: Piece
像这样
A better way is to use the core library Time::Piece
like this
use strict;
use warnings 'all';
use Time::Piece;
use Time::Seconds 'ONE_DAY';
my $yesterday = localtime() - ONE_DAY;
printf "Yesterday's Day: %d, Month: %d, Year: %d\n",
$yesterday->mday,
$yesterday->mon,
$yesterday->year;
输出
output
Yesterday's Day: 11, Month: 11, Year: 2015
这篇关于为什么perl的本地时间似乎输出错误的月份?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!