時間、数分、秒、ミリ秒があるときの計算期間
-
26-10-2019 - |
質問
私はFortranでプログラムを執筆しており、プログラムの期間をMillisecondsに計算する方法が必要です。私は関数「date_and_time」を使用しています。これにより、システムの時間、数分、秒、およびミリ秒の時間を含む配列が残ります。
プログラムの開始時にこの関数を呼び出して現在の時間を保存してから、プログラムの最後にもう一度関数を呼び出して最新の時間を保存できると思います。しかし、その後、どのように期間をコンピューターしますか?値を差し引くだけで試みましたが、1分間がパスすると秒がリセットされたように、1秒が通過するとミリ秒がリセットされました。これにアプローチする最良の方法はどうでしょうか?
これがプログラムです:
PROGRAM TEST_TIME_AND_DATE
INTEGER I
REAL J
INTEGER TIME_A(8), TIME_B(8)
CALL DATE_AND_TIME(VALUES=TIME_A)
PRINT '(8I5))', TIME_A
DO I = 0, 400000000
J = I * I - J
END DO
CALL DATE_AND_TIME(VALUES=TIME_B)
print '(8I5))', TIME_B
END PROGRAM TEST_TIME_AND_DATE
そして、これが結果です:
2011 6 11 -300 9 14 49 304
2011 6 11 -300 9 14 50 688
ここで何をすべきかわからない、ありがとう。
解決
数値を差し引いてから、すべてをミリ秒に変換し、MS、MSのSEC、MIN、MSのHRS、...
あなたの場合、これはそうでしょう
0 + 0 + 0 + 0 + 0 + 1*1000 + 384 = 1384 [ms]
このアプローチは、すべて同じ基盤に変換されている場合、左に列の列のアウトウェイトのマイナス数の正の数があるため、オーバーフローでも正常に機能します。例えば 0:58.000
に 1:02.200
降伏
1 * 60000 + (-56) * 1000 + 200 = 4200
これは数日まで機能しますが、共通の長さを共有していないため、数か月では機能しません。
他のヒント
経過クロック時間が必要な場合は、単一の時間値出力を提供するため、本質的な手順システム_Clockを使用する方が簡単です。 (手順に関する情報を提供するための追加の議論があります。そのため、関数の代わりに手順である理由です。)たとえば、たとえば、手順です。) http://gcc.gnu.org/onlinedocs/gfortran/system_005fclock.html. 。 CPUの使用法をタイミングしたい場合は、CPU_TIMEを使用してください。どちらの場合も、プログラムの開始時と終了時に2つの呼び出し、次に単純な違いがあります。 count_rate引数を使用して、時間の整数数に秒に変換できます。
数秒またはミリ秒で開始時間(1970年1月1日)からオフセットを計算できます。これらの数字の違いは、あなたの経過時間です。
(2011 - 1970) * (number of seconds in a year) +
(month of the year - 1) * (number of seconds in a month) +
(day of the month - 1) * (number of seconds in a day) +
( ... )