我见过许多博客说localtime
函数从1900年开始返回年份。
但是对我来说,当我在当前日期添加180天并使用localtime
进行打印时,它显示的是2016年的正确年份,而不是116年。
示例:
$today_date=timelocal(0,0,0,27,03,2016);
$seconds=180*60*24*60;
$date=today_date+seconds;
$new_date=localtime(date);
print strftime("%d-%m-%Y",$new_date);
Output:
24-10-2016
当我作为116而不是2016年作为时间本地输入时,它仍然将输出作为2016年。这怎么可能?
答案 0 :(得分:-2)
您的源代码错误,您错过了变量名前面的$
符号。
首先从模块Time::Local调用timelocal
,该模块将自1900年以来的年数作为输入,但将2016年作为年份值传递。最后,您将此日期传递回localtime
,这正是相反的功能。
试试这个:
print time;
print join(" ",localtime(time));
1461783061
1 51 20 27 3 116 3 117 1
你得到:
我localtime
的默认用法是:
my @now = localtime(time);
# Convert zero-based-month to calendar month
++$now[4];
# Convert 1900-based-year to calendar year
$now[5] += 1900;
如果您只需要日期计算,请尝试Date::Calc
use Date::Calc qw(Today Add_Delta_Days);
print join '-', Today();
print join '-', Add_Delta_Days(Today(),1);
2016-4-27
2016-4-28
或DateTime:
use DateTime;
print DateTime->now->add(days => 1, seconds => 180);
2016-04-28T19:00:12
DateTime
的{{1}}方法或strftime
选项会为您提供所需的输出。