$end = "15:29:15";
この2つの時刻の差を "hh:mm:ss" 形式で
$diff に代入する Perl のスクリプトを提示してください。
Perlは得意じゃないので、練習のつもりで書いてみました。
$start = "15:16:52";
$end = "15:29:15";
@a = split(/:/,$start);
$startsec = @a[0]*3600 + @a[1]*60 + @a[2];
@a = split(/:/,$end);
$endsec = @a[0]*3600 + @a[1]*60 + @a[2];
$diffsec = $endsec - $startsec;
@b[0] = int($diffsec / 3600);
@b[1] = int(( $diffsec % 3600 ) / 60);
@b[2] = ($diffsec % 3600 ) % 60;
$diff = join(':',@b);
一応動作確認はしました。
上のとか分かりやすくていいけれど、
モジュール活用するなら
#!/usr/bin/perl
use strict;
use Time::Simple qw / date /;
use Time::Format qw / time_strftime /;
my $start = "15:16:52";
my $end = "15:29:15";
my $time_start = Time::Simple->new($start);
my $time_end = Time::Simple->new($end);
my $diff_pre = $time_end - $time_start;
my $diff = time_strftime('%H:%M:%S',$diff_pre-32400);
とか?モジュールがなければcpanでとってきて、
インストールの権限がなければ、適当なところにおいて
use lib qw(/home/user_name/pm);
とか書けばいいです。
動作は確認済み。
コメント(3件)
$start = "15:16:52";
$end = "15:29:15";
@a = split(/:/,$start);
$startsec = @a[0]*3600 + @a[1]*60 + @a[2];
@a = split(/:/,$end);
$endsec = @a[0]*3600 + @a[1]*60 + @a[2];
$diffsec = $endsec - $startsec;
@b[0] = int($diffsec / 3600);
@b[1] = int(( $diffsec % 3600 ) / 60);
@b[2] = ($diffsec % 3600 ) % 60;
$diff = sprintf("%02d:%02d:%02d",@b);
とかの間違いではないですか?
実行してみると確かに動きますが、たぶん意図しているのとはまったく別のロジックで、「結果的に」動いているだけだと思います。
申し訳ない。修正しました。
$start = "15:16:52";
$end = "15:29:15";
@a = split(/:/,$start);
$startsec = $a[0]*3600 + $a[1]*60 + $a[2];
@a = split(/:/,$end);
$endsec = $a[0]*3600 + $a[1]*60 + $a[2];
$diffsec = $endsec - $startsec;
$b[0] = int($diffsec / 3600);
$b[1] = int(( $diffsec % 3600 ) / 60);
$b[2] = ($diffsec % 3600 ) % 60;
$diff = sprintf("%02d:%02d:%02d",@b);
なんで動いてたんだろう?