日付やシステム時間の取得方法

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