首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用POSIX模块计算perl中的时间差?

如何使用POSIX模块计算perl中的时间差?
EN

Stack Overflow用户
提问于 2021-12-11 11:15:32
回答 1查看 137关注 0票数 0

我对perl脚本很陌生。我需要找出天/小时/分钟/秒内两个日期的差异,只要我有POSIX模块(我不能使用时间::Piece或DateTime或.(模块)

喜欢,

代码语言:javascript
运行
复制
$date1 = Tue Nov 30 10:53:38 2021;
$date2 = Fri Dec 10 02:12:25 2021;

$output = $date2 - $date1 :: $output应为09天3小时19分钟47秒

你能告诉我如何实现这一点吗:解析、计算?

您的帮助将不胜感激。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-12-12 07:22:48

算法可以用POSIX::mktime函数来解决这个问题。

输入日期需要一些“按摩”才能将所提供的日期以mktime函数的预期形式表示出来,这是由date2epoch函数实现的,后者以秒为单位返回日期的表示。

一旦将日期转换为秒,获得以天/小时/分钟/秒表示的时间差是一个简单的计算问题。

注1:假定日期是在同一时区内获得的。

注2:OP的日期差异计算为incorrect

代码语言:javascript
运行
复制
use strict;
use warnings;
use feature 'say';

use POSIX;

my $date1 = 'Tue Nov 30 10:53:38 2021';
my $date2 = 'Fri Dec 10 02:12:25 2021';

my $diff = date_diff($date1,$date2);

printf "Date difference: %02d days %02d hours %02d min %02d sec\n",
       $diff->@{qw/days hours min sec/};

sub date_diff {
    my $date1 = shift;
    my $date2 = shift;

    my $diff;
    my $sec_diff = date2epoch($date2) - date2epoch($date1);

    $diff->{sec}   = $sec_diff % 60;
    $diff->{min}   = ($sec_diff % 3600 - $diff->{sec} ) / 60;
    $diff->{hours} = $sec_diff / 3600 % 24;
    $diff->{days}  = int( $sec_diff / ( 24 * 3600 ) );

    return $diff;
}

sub date2epoch {
    my $str_date = shift;

    my($months,$date,$epoch);
    
    $months->@{qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/} = (0..11);

    $date->@{qw/week_day month month_day time year/} = split(' ', $str_date);
    $date->@{qw/hour min sec/} = split(':', $date->{time});
    
    $date->{month} = $months->{ $date->{month} };
    $date->{year} -= 1900;
    
    $epoch = POSIX::mktime( $date->@{qw/sec min hour month_day month year/} );
    
    return $epoch;
}

输出

代码语言:javascript
运行
复制
Date difference: 09 days 15 hours 18 min 47 sec
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70314673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档