为了账号安全,请及时绑定邮箱和手机立即绑定

perl不用模块计算指定日期和今天相差天数

perl不用模块计算指定日期和今天相差天数

BIG阳 2019-03-29 19:18:27
调用格式 perl xxx.pl YYMMDD 指定日期早于或等于今天输出相差天数 如果指定日期比今天早,则输出负数如果用模块的话,确实有相应的函数,但是还要在机子上安装模块,太麻烦了所以最好不用模块计算原来有一个思路,就是从今天向前循环,如果循环到某天符合指定日期,则输出总感觉这种方法太笨了,有什么好方法没,谢谢
查看完整描述

3 回答

?
哔哔one

TA贡献1854条经验 获得超8个赞

#!/usr/bin/perl
use strict;
use warnings;
use Time::Local; #自带日期模块

my $input = shift;

my ($year, $mon, $day) = $input=~/(\d{2})(\d{2})(\d{2})/;

my $today = time();

my $other_day = timelocal(0,0,0,$day,$mon-1, $year);

my $diff = $other_day - $today;

printf "It is %.2f days ", abs($diff/(60*60*24));

print $diff>0? "in the future\n" : "ago\n";

查看完整回答
反对 回复 2019-03-31
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

模块不用另外装的。本来就有,连载入都不用啊,除非你的版本特别老?
以下是一些时间的常见用法。你自己直接用这些函数就好了,我做了简单的注解。

my $t=time; # 得到时间,不过是一串数字
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($t); #也可以用=gmtime
$year+=1900; # $year变量的意思是since 1900
my @months = qw (Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); # count since 0
message("$year-$months[$mon]-$mday $hour:$min:$sec, isdst: $isdst, day: $mday"); # number of seconds since Jan 1st, 1970



查看完整回答
反对 回复 2019-03-31
?
倚天杖

TA贡献1828条经验 获得超3个赞

程序我没有办法帮你实现了。我只能告诉你思路。把你的输入的日期 转换为unix时间截,然后再取系统时间截 。时间截好像是从1970-01-01 00:00:00 开始算起的。通常是一组数字,如
[fy138@mail ~]$ perl -e 'print time()'
1313997257

查看完整回答
反对 回复 2019-03-31
  • 3 回答
  • 0 关注
  • 914 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信