2016-12-21 10 views
0
#!/usr/bin/perl 

sub parkingcharge { 

    sub exittime 
    { 
     ($sec, $min, $hour) = localtime(); 
     print "exit time:$hour:$min:$sec\n"; 
    } 

    my $exit = exittime(); 
    my $entry = "9:10:8"; 

    print "\nvehicle entry time is :$entry\n"; 
    print "\nvehicle exit time is :$exit\n"; 

    my $parkingCharge = ($entry - $exit); 

    print "\ntotal parking charge is : $parkingCharge\n"; 
} 

parkingcharge(); 

出力は、私はPerlの車両管理プログラムで駐車料金を見つけたい、この現地時間とユーザー定義時間の時間差を求めるにはどうすればよいですか?

exit time:5:46:57 

vehicle entry time is :9:10:8 

vehicle exit time is :1 

total parking charge is : 8 

のように表示されます。料金は1時間に2ドルですので、入場時間と退出時間の差を時間単位で求め、2を掛けたいと思います。私が書いたコードは間違った結果をもたらします。

時差を時間単位で取得するにはどうすればよいですか?

+3

私はあなたのDateTimeパッケージを使用することをお勧め:http://search.cpan.org/~drolsky/DateTime-1.41/lib/DateTime.pm – jhilmer

+3

はサブの内側という名前のサブの定義が間違っています。 – choroba

+0

実際に '9:10:8'という形式の時刻がありますか?世界では、「時:分:秒」の時間に先行ゼロがないのはどこですか? – simbabque

答えて

1

Time::Pieceは、Perlに付属しています。これは、日付を構文解析的な砂糖を用いた本質的にエポックタイムスタンプであるTime :: Pieceオブジェクトに構文解析する便利な方法を提供します。彼らについての素晴らしいことは、あなたが数学でそれらを使うことができ、秒を得ることです。

時間があるだけなので、入力と退室の両方に同じ日付を設定する必要があります。これを行う1つの方法は、今日の日付をチェックし、両方の変数で使用することです。しかし、それを放棄するほうが簡単です。 Time :: Pieceはそれが1970-01-01と仮定します。これは問題ありません。夜間に駐車することができない限り、両方のタイムスタンプの日付が同じであることが重要です。

the strptime methodを使用して、入力時刻を解析します。 2番目の引数は、placeholdersのパターンです。 %Hは24時間表記の時間であり、%Mは分であり、%Sは秒です。これは先行ゼロがなくても機能します。

ちょうどprint $entryの場合は、1970-01-01 09:10:08、またはThu Jan 1 09:10:08 1970となります。

次に、終了時刻を取得する必要があります。

my ($sec, $min, $hour) = localtime; 
my $exit = Time::Piece->strptime("$hour:$min:$sec", '%H:%M:%S'); 

ちょうどスカラーコンテキストでlocaltimeを使用すると、私たちに今日の日付を与えるので、私たちは余分なステップを行う必要があります。あなたのコードにはすでにこの瞬間の秒、分、時間があります。正しい形式の文字列としてそれを使用し、$entryと同じ方法でstrptimeに入力します。今私はこれを書いている間にThu Jan 1 14:46:56 1970である終了タイムスタンプを持っています。

時間を取得することは、単純な減算の問題です。それを数時間に変換するのは、分の場合は60分、時間の場合は60分だけです。

my $duration = $exit - $entry; 
my $duration_in_hours = $duration/60/60; 

$duration_in_hoursは、今の私にとって5.61333333333333です。開始時間ごとに料金を支払うようにしたい場合は、丸めなければなりません。

my $fee_started_hours = int($duration_in_hours + 1) * $hourly_fee; 

私は駐車場のフル時間を支払うことを好むので、もっと丸めたいと思います。

my $fee_full_hours = int($duration_in_hours) * $hourly_fee; 
関連する問題