1

私は何か間違ったことをしているに違いありませんが、それを理解することはできません。localtime() の引数として秒を指定すると、秒と 16 時間が返されます。

my $startTime = time;

(process)

my $endTime = time;

my $diffTime = ( $endTime - $startTime );

($sec,$min,$hour) = localtime( $diffTime );

print STDERR "diffTime = $diffTime\n";
print STDERR "hour = $hour\n";
print STDERR "min= $min\n";
print STDERR "sec = $sec\n";

print( sprintf( "Elapsed time : %02d:%02d:%02d\n", $hour, $min, $sec ) );

...常に出力:

diffTime = 4
hour = 16
min= 0
sec = 4
Elapsed time : 16:00:04

わかった。コメントを追加する方法を見つけました - NoScript の設定が厳しすぎました。

ありがとう...

このスレッドにコメントを追加できないようですので、ここで皆さんに感謝します。

gmtime を使用しないことが問題でした。これは最も効率的な解決策ではないかもしれませんが、私が必要としているものには機能します。これは、ユーザーがルーチンの完了を待つ時間を評価し、入力の大きさを決定するための簡単な情報です。彼/彼女が使いやすいデータセット。

4

4 に答える 4

5

デュレーションとタイムスタンプが混在しているため、トラブルが発生しています...マンスールが示唆するように、を使用しても問題が解決gmtimeする場合がありますが、それでもリンゴをオレンジとして使用しています。

以下は機能し、コアのTime::PieceおよびTime::Secondsモジュールを使用します。ただし$diffTime->pretty、現在のバージョンの Perl にバンドルされているよりも新しいバージョン (1.20) の Time::Piece が必要です。

use strict;
use warnings;
use 5.010;
use Time::Piece 1.20;

my $startTime = localtime();

# (process)

my $endTime = localtime();

my $diffTime = ( $endTime - $startTime );

say STDERR "diffTime = ", $diffTime;
say STDERR "hours = ", $diffTime->hours;      # not the same thing as above
say STDERR "minutes = ", $diffTime->minutes;  # not the same thing as above
say STDERR "seconds = ", $diffTime->seconds;  # not the same thing as above

say "Elapsed time: ", $diffTime->pretty;

これは次のようなものを出力するかもしれません:

150
0.0416666666666667
2.5
150
2 minutes, 30 seconds
于 2011-01-20T17:36:55.860 に答える
5

$difftimeは2 つの「エポック時間」(GMT 1970 年 1 月 1 日午前 0 時からの秒数)の差ですが、それはエポック時間にはなりません。したがって、これは の適切な引数ではありませんlocaltime()。h/m/s 内訳を自分で計算した方がよいでしょう:

($sec,$min,$hour) = ($difftime % 60, int($difftime/60) % 60, int($difftime/3600));
于 2011-01-20T17:40:57.717 に答える
4

gmtime関数の代わりに関数を使用したいlocaltime

エポック日付は1970年1月1日00:00:00GMT/ UTCであるため、電話をかけると、タイムゾーンlocaltime(0)のエポック日付が表示されます。

編集:フォローアップをありがとう。前述のように、これは24時間未満の間隔を測定している場合にのみ機能します。localtimeおよび関数はどちらも、gmtime実際には日付の値を返します。秒、分、時間、日、月、年、日、および時刻が夏時間に該当するかどうかです。もちろん、秒、分、時間を超えるものはすべて、日付のコンテキスト以外では意味がありません。

于 2011-01-20T17:12:12.913 に答える
3

これは、℉ → ℃ は の変換を必要とするため、C = (F - 32) * 5/95 ℉ だけ暖かくなった場合、それは -15 ℃ だけ暖かくなったのと同じに違いない、というのと同じ問題です。 ℉ を明白だが間違った式に変換します。

それが意味をなさない理由がわかりますか?華氏 5 度暖かくなることは、摂氏 15 度寒くなることとまったく同じではありません。

あなたは自分のタイムで同じ過ちを犯しました。エポックからの経過秒数を測定するたびに数量を減算すると、エポックからの経過秒数も測定する結果が得られませ!!

localtimeorはエポック秒でのみ呼び出すことができます。つまりgmtime、エポックからの経過秒数であり、一般的な秒数ではありません。それ以外の場合は、独自の除算を行うか、モジュールを使用して、その減算の結果に大きな単位がいくつあるかを調べる必要があります。

于 2011-01-20T17:32:04.270 に答える