Perl构造日期对象和计算日期间天数差的问题
答案:2 悬赏:70 手机版
解决时间 2021-02-28 15:55
- 提问者网友:趣果有间
- 2021-02-27 21:34
请问Perl如何构造日期对象,并计算两个日期对象之间相差的天数?
最佳答案
- 五星知识达人网友:想偏头吻你
- 2021-02-27 22:49
#获取当前的时间
today = Time.new;
puts "当前日期:" + today.strftime("%Y-%m-%d %H:%M:%S");#采用格式化输出
#获取指定日期的时间 如 2010-08-30 20:50:01
day = Time.local(2010, 8 , 30 , 20, 50, 1);
puts "指定日期:" + day.strftime("%Y-%m-%d %H:%M:%S");
#获取指定日期的秒数(就是1970年到指定日期的秒数)
sec1 = day.to_i;
#同理,获取今天的秒数
sec2 = today.to_i;
#秒数求差,同时折合为天数
num = (sec1 - sec2)/(24*60*60);
puts (day.strftime("%Y-%m-%d %H:%M:%S") + "与" + today.strftime("%Y-%m-%d %H:%M:%S") + "相差" + num.to_s + "天");
today = Time.new;
puts "当前日期:" + today.strftime("%Y-%m-%d %H:%M:%S");#采用格式化输出
#获取指定日期的时间 如 2010-08-30 20:50:01
day = Time.local(2010, 8 , 30 , 20, 50, 1);
puts "指定日期:" + day.strftime("%Y-%m-%d %H:%M:%S");
#获取指定日期的秒数(就是1970年到指定日期的秒数)
sec1 = day.to_i;
#同理,获取今天的秒数
sec2 = today.to_i;
#秒数求差,同时折合为天数
num = (sec1 - sec2)/(24*60*60);
puts (day.strftime("%Y-%m-%d %H:%M:%S") + "与" + today.strftime("%Y-%m-%d %H:%M:%S") + "相差" + num.to_s + "天");
全部回答
- 1楼网友:平生事
- 2021-02-27 23:17
时间相减
use Date::Calc qw( Delta_Days );
print Delta_Days(2009,8,21,2010,8,21),"\n";
# calculate 2009-8-21 to 2010-8-21
# result 365
PERL时间操作对象
Perl中的time() 函数返回以纪元秒形式表示的当前日期和时间。如果你打算把它转换为字符串,就可使用gmtime() 和localtime() 函数:
$now = localtime(time());
($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst) = localtime(time());
如果调用 localtime() 或gmtime() 时不带参数,它将自己调用time()
$now = localtime();
($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst) = localtime();
常见的日期和时间操作
如果你打算计算两个时刻之间的时间段,只需将它们转换为相应的纪元秒,然后两数相减即可:
$difference_in_seconds = $later_datetime -$earlier_datetime;
要把秒转换为分,时,或天数,只需要分别将它们除以60, 3600 和 86400 即可:
$difference_in_minutes = $difference_in_seconds / 60;
$difference_in_hours = $difference_in_seconds / 3600;
$difference_in_day = $difference_in_seconds / 86400;
反过来做,你也可以回答如下问题:”4天后是几号?”:
$then = time() + 86400 * 4;
print scalar localtime $then;
它给出的答案精确到秒。例如,如果4天后的纪元秒值为932836935, 你可以输出日期的字符串如下;
Sat Jul 24 11:23:17 1999
如果你打算输出那个日期的午夜时分 (如”Sat Jul 24 00:00:00 1999〃) 使用如下模块:$then = $then - $then % 86400; # 去掉那个日期的尾巴
类似地,你可以用四舍五入法,输出最靠近午夜时分的日期:
$then += 43200; # add on half a day
$then = $then - $then % 86400;# truncate to the day
如果你的时区距离GMT为相差偶数个小时,这就管用了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯