$start = "15:16:52";

$end = "15:29:15";

この2つの時刻の差を "hh:mm:ss" 形式で
$diff に代入する Perl のスクリプトを提示してください。

回答の条件
  • 1人1回まで
  • 登録:
  • 終了:2007/06/12 22:57:24
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:bmw120i No.1

回答回数24ベストアンサー獲得回数4

ポイント35pt

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);

一応動作確認はしました。

id:bizarre_sprout No.2

回答回数4ベストアンサー獲得回数1

ポイント35pt

上のとか分かりやすくていいけれど、

モジュール活用するなら


#!/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);

とか書けばいいです。

動作は確認済み。

  • id:bmw120i
    フォーマットをそろえるならこっちのほうが良かったですかね。
    $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);
  • id:b-wind
    $startsec = $a[0]*3600 + $a[1]*60 + $a[2];
    とかの間違いではないですか?
    実行してみると確かに動きますが、たぶん意図しているのとはまったく別のロジックで、「結果的に」動いているだけだと思います。
  • id:bmw120i
    おっしゃるとおりですね。
    申し訳ない。修正しました。
    $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);

    なんで動いてたんだろう?

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません