【发布时间】:2015-11-12 16:42:22
【问题描述】:
我看过其他答案,但由于某种原因它们对我不起作用。
我正在尝试使用以下代码在 Perl 脚本中获取昨天的日期。
为了将来参考,今天的日期是 2015 年 11 月 12 日
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";
除了我的输出看起来像这样
Yesterday's Day: 11, Month: 10, Year: 2015.
我应该将昨天的日期读取为Day: 11, Month: 11, Year: 2015。为什么要减去月份?
编辑:这与建议的答案不同,因为我想知道为什么当地时间似乎写错了月份。
【问题讨论】:
-
timelocal()中的月份从0到11 -
@Prix 这没有回答 OP 关于为什么
localtime在 11 月返回 10 而不是 11 的问题,所以我认为这不是一个好的欺骗目标。 (不过,这可能还有另一个问题。) -
@Prix 阅读问题的正文,这不是您链接的问题的欺骗。人们总是写不好的标题,但仅仅因为一个人的问题标题为“Perl 问题”并不会使其与标题为“PERL 问题”的问题重复。
-
@Prix Perl Incorrect day generated by localtime 是一个实际的副本,虽然这个问题写得更好,所以我投票关闭另一个作为这个问题的欺骗。
-
要获得更好的方法,请参阅How do I find yesterday's date? in
perldoc perlfaq4。