[码海拾贝 之Perl]获取日期以及日期的加减

本文介绍如何在Perl中不依赖额外模块,利用localtime函数获取本地日期和时间,并详细解释了标量和列表上下文下的返回值,以及如何通过这些值计算当前日期。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

在Perl 中, 不安装其他模组的状况下, 可以使用 localtime 来获取当地日期和时间。

在标量上下文中, 返回的是字符串格式。

my $localtime = localtime();
print "\n$localtime\n";
返回:

Thu Jan  1 18:17:56 2015


在列表上下文中, 返回的是描述当前时间的一个元素列表

my ($sec,$min,$hour,$mday,$mon,$year_off,$wday,$yday,$isdat) = localtime();

$sec     秒,0 ~ 59
$min     分,0 ~ 59
$hour     时,0 ~ 23
$mday     月份中的日期, 1 ~ 2 8、2 9、3 0或3 1
$mon     年份中的月份, 0 ~ 11(这里请特别要小心)
$year_off    1900年以来的年份。将1900加上这个数字,得出正确的4位数年份
$wday     星期几,0 ~ 6
$yday     一年中的第几天,0 ~ 364或365
$isdst     如果夏令时有效,则为真

所以通过这种方式获得的日期:

年份需要加 1900:  $year += 1900;

月份需要加一  : $mon += 1;



几个方法

得到当前日期:

sub get_current_day
{
	my($sec,$min,$hour,$day,$mon,$year) = localtime(); 
	$mon++;$year += 1900;
	my $data_now = sprintf("%04d/%02d/%02d",$year,$mon,$day);
	return $data_now;
}

如果要得到上一天的日期, 不能只是简单的在上面的日期基础上减一, 如果这样, 遇到跨月就会有问题:

正确的是 时间减去 86400秒(24 小时)

sub get_last_day
{
	my($sec,$min,$hour,$day,$mon,$year) = localtime(time()-86400); 
	$mon++;$year += 1900;
	my $data_now = sprintf("%04d/%02d/%02d",$year,$mon,$day);
	return $data_now;
}

得到上几天的日期:

sub get_last_number_day
{
	my($lastNumber) = @_; 
	my($sec,$min,$hour,$day,$mon,$year) = localtime(time()-86400*$lastNumber); 
	$mon++;$year += 1900;	
	my $data_now = sprintf("%04d/%02d/%02d",$year,$mon,$day);
	return $data_now;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oscar999

送以玫瑰,手留余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值