저는 Perl에서 상당히 새롭습니다. 나는이 형식Perl이 두 날짜를 뺍니다.
15.07.16 23:13:34
15.07.16 20:04:24
내가 날짜 개체에서이 문자열을 변환 할 필요가 있음을 알고 두 날짜를 빼기 위해 노력하고 있어요. 내 문제는 추가 패키지를 설치하지 않고 기본 perl로 제한됩니다. 그것을 할 수있는 방법이 있습니까?
내 버전은 v5.8.4이고 출력은 03:09:10
이어야합니다.
저는 Perl에서 상당히 새롭습니다. 나는이 형식Perl이 두 날짜를 뺍니다.
15.07.16 23:13:34
15.07.16 20:04:24
내가 날짜 개체에서이 문자열을 변환 할 필요가 있음을 알고 두 날짜를 빼기 위해 노력하고 있어요. 내 문제는 추가 패키지를 설치하지 않고 기본 perl로 제한됩니다. 그것을 할 수있는 방법이 있습니까?
내 버전은 v5.8.4이고 출력은 03:09:10
이어야합니다.
당신은 Perl 5.8.4를 사용하고 있다고 말합니다. CPAN 모듈을 설치하고 업데이트해야합니다.
그러나 여기는 5.8.4에서 사용 가능한 핵심 Perl 기능 만 사용하여 원하는 작업을 수행하는 방법입니다.
#!/usr/bin/perl
use strict;
use warnings;
use Time::Local;
my $date1 = '15.07.16 23:13:34';
my $date2 = '15.07.16 20:04:24';
my $diff = date2sec($date1) - date2sec($date2);
print secs2duration($diff);
sub date2sec {
my ($date) = @_;
my ($day, $mon, $yr, $hr, $min, $sec) = split(/[. :]/, $date);
# I've assumed that your timestamps are in your local timezone,
# so I've used timelocal() here. If your timestamps are actually
# UTC, you should use timegm() instead.
return timelocal($sec, $min, $hr, $day, $mon-1, 2000 + $yr);
}
sub secs2duration {
my ($secs) = @_;
my $hours = int($secs/(60*60));
$secs %= (60*60);
my $mins = int($secs/60);
$secs %= 60;
return sprintf '%02d:%02d:%02d', $hours, $mins, $secs;
}
어떤 Perl 버전을 보유하고 있습니까? 출력으로 기대하는 것은 무엇입니까? 당신은 당신의 질문을 편집 할 수 있습니다. – simbabque
링크 된 복제는 기본적으로 원하는 것입니다. 'strptime '의 패턴은 약간 다릅니다. 올바른 패턴을 구성하는 방법은 http://man7.org/linux/man-pages/man3/strptime.3.html을 참조하십시오. – simbabque
내 버전은 v5.8.4이고 출력은 03:09:10 – dermont