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

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

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

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

3 回答

?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

#!/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-06-01
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

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

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-06-01
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-06-01
  • 3 回答
  • 0 关注
  • 435 浏览

添加回答

举报

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