時刻や CPU の経過時間を戻すライブラリ関数は、システムによって異なります。
次の表に、Fortran ライブラリでサポートされる時間関数を示します。
表 7–3 Sun Fortran 時間関数|
名称 |
機能 |
マニュアルページ |
|---|---|---|
|
time |
1970 年 1 月 1 日からの経過秒数を返す |
time(3F) |
|
date |
日付を文字列で返す |
date(3F) |
|
fdate |
現在の時刻と日付を文字列で返す |
fdate(3F) |
|
idate |
現在の月、日、年を整数配列で返す |
idate(3F) |
|
itime |
現在の時、分、秒を整数配列で返す |
itime(3F) |
|
ctime |
time 関数の返した時間を文字列に変換する |
ctime(3F) |
|
ltime |
time 関数の返した時間を現地時刻に変換する |
ltime(3F) |
|
gmtime |
time 関数の返した時間をグリニッジ標準時に変換する |
gmtime(3F) |
|
etime |
シングルプロセッサ:プログラムの実行で経過したユーザー時間とシステム時間を返す。 複数のプロセッサ:実測時間を返す。 |
etime(3F) |
|
dtime |
最後に dtime を呼び出した時点から経過したユーザー時間とシステム時間を返す |
dtime(3F) |
|
date_and_time |
日付と時刻を文字と数値で返す |
date_and_time(3F) |
詳細は、『Fortran ライブラリ・リファレンス』、またはそれぞれの関数のマニュアルページを参照してください。次に、これら時間関数を使用した簡単な例を示します (TestTim.f)。
subroutine startclock
common / myclock / mytime
integer mytime, time
mytime = time()
return
end
function wallclock()
integer wallclock
common / myclock / mytime
integer mytime, time, newtime
newtime = time()
wallclock = newtime– mytime
mytime = newtime
return
end
integer wallclock, elapsed
character*24 greeting
real dtime, timediff, timearray(2)
c 見出しを出力
call fdate( greeting )
print*, " こんにちは。現在の時刻は: , 挨拶
print*, " 'sleep 4' に何秒かかるか見てみよう"
call startclock
call system( 'sleep 4' )
elapsed = wallclock()
print*, "sleep 4 の実行で経過した時間: ", elapsed," 秒"
c ここで簡単な計算に必要な CPU 時間をテスト
timediff = dtime( timearray )
q = 0.01
do 30 i = 1, 100000
q = atan( q )
30 continue
timediff = dtime( timearray )
print*, "atan(q) 10 万回にかかった時間: ", timediff ," 秒"
end
|
このプログラムを実行すると、次のような結果になります。
demo% TimeTest
こんにちは。現在の時刻は: Thu Feb 8 15:33:36 2001
'sleep 4' に何秒かかるか見てみよう
sleep 4 の実行で経過した時間: 4 秒
atan(q) 10 万回にかかった時間: 0.01 秒
demo%
|
次の表に示すルーチンは、VMS Fortran のシステムルーチン idate と time との互換機能を提供します。これらのルーチンを使用するときは、f95 のコマンド行で -lV77 オプションを指定する必要があります。この場合、標準の f95 バージョンの代わりに VMS バージョンの方が使用されることになります。
表 7–4 非標準 VMS Fortran システムルーチンの要約|
名称 |
定義 |
呼び出し手順 |
引数の型 |
|---|---|---|---|
|
idate |
日、月、年 (d,m,y) 形式の日付 |
call idate( d, m, y ) |
integer |
|
time |
時分秒 (hhmmss) 形式の現在時刻 |
call time( t ) |
character*8 |
date(3F) ルーチンおよび idate(3F) ルーチンの VMS バージョンは年を示す場合に 2 桁の値しか返さないので、2000 年問題に対応していません。これらのルーチンから返される日付を差し引いて継続時間を計算するプログラムは、1999 年 12 月 31 日以降は正しく機能しなくなります。代わりに、Fortran 95 のルーチン date_and_time(3F) を使用してください。詳細は、『Fortran ライブラリ・リファレンス』を参照してください。