プロが教える店舗&オフィスのセキュリティ対策術

例えば、こんなデータがあるとします。
$a = "19:31";
$b = "19:35";

それぞれ、19時31分と19時35分という意味です。
$bから$aを引いて、"00:05"という結果が欲しいのですが、Perlでどのように計算すればよいでしょうか?

質問者からの補足コメント

  • すみません、ご指摘のとおり、結果は"00:04"の間違いでした。

    No.1の回答に寄せられた補足コメントです。 補足日時:2022/11/28 17:35

A 回答 (2件)

1."19:31"を通算分に変換します。

("19:34"も同様)
2.通算分同士で引き算をします。
3.結果をhh:mm形式の文字列に変換します。

use strict;
my $a = "19:31";
my $b = "19:35";
my $a0 = serial_min($a);
my $b0 = serial_min($b);
my $res0 = $b0 - $a0;
my $res = str_hhmm($res0);
print $res;
sub serial_min{
my ($hhmm) = @_;
my ($hh,$mm) = split(/:/,$hhmm);
return $hh * 60 + $mm;
}
sub str_hhmm{
my ($mmm) = @_;
my $mm = $mmm % 60;
my $hh = int($mmm / 60);
my $time = sprintf("%02d:%02d",$hh,$mm);
return $time;
}
    • good
    • 0
この回答へのお礼

親切にわざわざコード書いてくださって助かります。
ありがとうございます。

お礼日時:2022/11/29 08:43

例えば「:」でバラして計算してもいいし, 分の単位にそろえてから計算してもいい.



とは思うけど, どうして結果が "00:05" になるんだろう. "00:04" ではない, んだよね?
この回答への補足あり
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
確かにバラせばいいですね。

お礼日時:2022/11/29 08:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!