[Fortran] JST(日本標準時からUTC世界標準時)への変換

[2014年 9月 12日 金曜日 09:41:27 JST]

[~/to_manda_sensei/Tools/MGDSST.AlongTrack]

[kunoki@aofd165]

$ ifort lst2utc.f90 -o lst2utc

$ lst2utc

LST: 2012 5 15 23

UTC: 2012 5 15 14

LST: 2012 5 15 5

UTC: 2012 5 14 20

LST: 2012 5 1 5

UTC: 2012 4 30 20

LST: 2012 3 1 5

UTC: 2012 2 29 20

LST: 2011 3 1 5

UTC: 2011 2 28 20

program check_lst2utc

integer lyr,lmo,ldy, lhr, uyr, umo, udy, uhr, tdh

tdh=+9

lyr=2012; lmo=5; ldy=15; lhr=23

call lst2utc(lyr,lmo,ldy, lhr, uyr, umo, udy, uhr, tdh)

print *,"LST: ",lyr, lmo, ldy,lhr

print *,"UTC: ",uyr, umo, udy,uhr

print *

lyr=2012; lmo=5; ldy=15; lhr=5

call lst2utc(lyr,lmo,ldy, lhr, uyr, umo, udy, uhr, tdh)

print *,"LST: ",lyr, lmo, ldy,lhr

print *,"UTC: ",uyr, umo, udy,uhr

print *

lyr=2012; lmo=5; ldy=1; lhr=5

call lst2utc(lyr,lmo,ldy, lhr, uyr, umo, udy, uhr, tdh)

print *,"LST: ",lyr, lmo, ldy,lhr

print *,"UTC: ",uyr, umo, udy,uhr

print *

lyr=2012; lmo=3; ldy=1; lhr=5

call lst2utc(lyr,lmo,ldy, lhr, uyr, umo, udy, uhr, tdh)

print *,"LST: ",lyr, lmo, ldy,lhr

print *,"UTC: ",uyr, umo, udy,uhr

print *

lyr=2011; lmo=3; ldy=1; lhr=5

call lst2utc(lyr,lmo,ldy, lhr, uyr, umo, udy, uhr, tdh)

print *,"LST: ",lyr, lmo, ldy,lhr

print *,"UTC: ",uyr, umo, udy,uhr

print *

end program check_lst2utc

subroutine lst2utc(lyr,lmo,ldy, lhr, uyr, umo, udy, uhr, tdh)

! Description:

!

! Author: am

!

! Host: aofd165.fish.nagasaki-u.ac.jp

! Directory: /work2/kunoki/to_manda_sensei/Tools/MGDSST.AlongTrack

!

! Revision history:

! This file is created by /usr/local/mybin/nff.sh at 09:19 on 09-12-2014.

! Reference

! 1行で書けるうるう年判別法

! http://d.hatena.ne.jp/Kappuccino/20081025/1224906495

!

implicit none

integer,intent(in):: lyr,lmo,ldy, lhr

integer,intent(inout)::uyr,umo,udy, uhr

integer,intent(in):: tdh

integer y

integer,dimension(12)::last_day

data last_day/31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31/

uyr=lyr

umo=lmo

udy=ldy

uhr=lhr

uhr=lhr-tdh

if(uhr<=0)then

uhr=uhr+24

udy=udy-1

endif

if(uhr==24)then

uhr=0

udy=udy+1

endif

if(udy<=0)then

umo=umo-1

udy=last_day(umo)

if(umo == 2)then

y=uyr

udy = 28 + (1 / (y - y / 4 * 4 + 1)) * &

& (1 - 1 / (y - y / 100 * 100 + 1)) &

& + (1 / (y - y / 400 * 400 + 1));

endif

endif

if(umo<=0)then

umo=1

uyr=uyr-1

endif

end subroutine lst2utc