[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