これについて助けが必要です。
次の形式で 2 つのパラメーター (時間) を受け取るスクリプトを作成したいと思いますAA:BB
(AA は 00 から 200 まで、BB は 0 から 59 まで)。
そして、それらを時間に加算して結果を出す必要があります。結果が 24 時間以上の場合は 1 日、週 7 日以上の場合は 1 日とします。
たとえば、23:03 11:05 は 1 日と 10:08 を示し、35:05 162:01 は 1 週間と 1 日と 5:06 を示します。
これについて助けが必要です。
次の形式で 2 つのパラメーター (時間) を受け取るスクリプトを作成したいと思いますAA:BB
(AA は 00 から 200 まで、BB は 0 から 59 まで)。
そして、それらを時間に加算して結果を出す必要があります。結果が 24 時間以上の場合は 1 日、週 7 日以上の場合は 1 日とします。
たとえば、23:03 11:05 は 1 日と 10:08 を示し、35:05 162:01 は 1 週間と 1 日と 5:06 を示します。
始める前に、1 日が 24 時間というわけではないことを思い出してください。1 日の長さは、22、23、24、25、または 26 時間です。これは、やりたいことが本質的にデータにエラーを追加することを意味します。
通常、モジュールを使用するように指示するのは私が最初です。なぜなら、優れた日付/時刻モジュールは、ユーザーが要求したことを正確に実行できないように設計されているためです。つまり、モジュールを使用するよりも、問題を最初から解決する方が簡単です。実際、私が通常使用しているモジュールである DateTime では、やりたいことを実行することさえできません。
my ($hours1, $minutes1) = split /:/, $arg1;
my ($hours2, $minutes2) = split /:/, $arg2;
my $hours = $hours1 + $hours2;
my $minutes = $minutes1 + $minutes2;
$hours += ($minutes - ($minutes % 60)) / 60; $minutes %= 60;
my $days = ($hours - ($hours % 24)) / 24; $hours %= 24;
my $weeks = ($days - ($days % 7)) / 7; $days %= 7;
DateTimeとDateTime::Durationの 2 つを使用する必要があるようです。
最初のもので日付を表すことができ、2番目のもので追加したい時間を表すことができます. 次に、 のadd_duration
メソッドを見てくださいDateTime
。