Fortran90以降の機能です。
忘れやすいので例によってサンプルプログラムにまとめました。
日付の取得にはdate_and_time関数を使用します。
program main
implicit none
integer date_time(8)
character(len=10) sys_time(3)
call date_and_time(sys_time(1), sys_time(2), sys_time(3), date_time)
write(*,*) "date_and_time"
write(*, '(a)') "<< argument 1-3 >>"
write(*, '(a, 1x, a)') "year, month, date : ", sys_time(1)
write(*, '(a, 1x, a)') "time : ", sys_time(2)
write(*, '(a, 1x, a)') "time zone : ", sys_time(3)
write(*,*)
write(*, '(a)') "<< argument 4 array>>"
write(*, '(a, 1x, i6)') "year : ", date_time(1)
write(*, '(a, 1x, i6)') "month : ", date_time(2)
write(*, '(a, 1x, i6)') "date : ", date_time(3)
write(*, '(a, 1x, i6)') "time zone[min.] : ", date_time(4)
write(*, '(a, 1x, i6)') "hour : ", date_time(5)
write(*, '(a, 1x, i6)') "minute : ", date_time(6)
write(*, '(a, 1x, i6)') "second : ", date_time(7)
write(*, '(a, 1x, i6)') "milli second : ", date_time(8)
end program main
実行結果
date_and_time
<< argument 1-3 >>
year, month, date : 20140218
time : 155431.688
time zone : +0900
<< argument 4 array>>
year : 2014
month : 2
date : 18
time zone[min.] : 540
hour : 15
minute : 54
second : 31
milli second : 688
システム時間にはsystem_time関数を使用します。引数にする整数のバイト長で扱える範囲が変わることを知ったので、kind=4とkind=8の両方を比較しています。
kind=4だと、2日ほど計算が進むと一週しそう。
program main
implicit none
write(*,*) "system_clock function"
write(*,*) "<< kind=4 >>"
call print_time4()
write(*,*) "<< kind=4 >>"
call print_time8()
contains
subroutine print_time4()
integer(kind=4) :: icount, icount_rate, icount_max
call system_clock(COUNT=icount, COUNT_RATE=icount_rate, &
& COUNT_MAX=icount_max)
write(*, '(a, 1x, i20)') "icount ", icount
write(*, '(a, 1x, i20)') "icount_rate ", icount_rate
write(*, '(a, 1x, i20)') "icount_max ", icount_max
end subroutine print_time4
subroutine print_time8()
integer(kind=8) :: icount, icount_rate, icount_max
call system_clock(COUNT=icount, COUNT_RATE=icount_rate, &
& COUNT_MAX=icount_max)
write(*, '(a, 1x, i20)') "icount ", icount
write(*, '(a, 1x, i20)') "icount_rate ", icount_rate
write(*, '(a, 1x, i20)') "icount_max ", icount_max
end subroutine print_time8
end program main
結果
system_clock function
<< kind=4 >>
icount 659766089
icount_rate 10000
icount_max 2147483647
<< kind=4 >>
icount 1392706756609384
icount_rate 1000000
icount_max 9223372036854775807