gpt4 book ai didi

perl - 为什么 perl 的本地时间似乎输出错误的月份?

转载 作者:行者123 更新时间:2023-12-02 05:59:17 26 4
gpt4 key购买 nike

我看过其他答案,但出于某种原因它们对我不起作用。

我正在尝试使用以下代码在 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。为什么要减去月份?

编辑:这与建议的答案不同,因为我想知道为什么本地时间似乎写错了月份。

最佳答案

documentation for localtime说这个

$mday is the day of the month and $mon the month in the range 0..11, with 0 indicating January and 11 indicating December.

因此,要获得 1 月份的月份编号,您需要 $mon+1,或者您可以在添加的同时向 $mday 添加一个1900 到 $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";

输出

Yesterday's Day: 11, Month: 11, Year: 2015

更好的方法是使用核心库Time::Piece像这样

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;

输出

Yesterday's Day: 11, Month: 11, Year: 2015

关于perl - 为什么 perl 的本地时间似乎输出错误的月份?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33676711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com