加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 23:49:07 所属栏目:大数据 来源:网络整理
导读:前言 在Perl 中, 不安装其他模组的状况下, 可以使用 localtime 来获取当地日期和时间。 在标量上下文中, 返回的是字符串格式。 my $localtime = localtime();print "n$localtimen"; 返回: Thu Jan? 1 18:17:56 2015 在列表上下文中, 返回的是描述当前

前言

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

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

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

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,$day,$year) = localtime(); 
	$mon++;$year += 1900;
	my $data_now = sprintf("%04d/%02d/%02d",$year,$day);
	return $data_now;
}

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

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

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

得到上几天的日期:

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读