Unix Time:1403298617 0x53A4A339
Date: 2014 6 20 21 10 17
注意:最高可支持到2038年1月19日03:14:07
Program www_fcode_cn Implicit None Integer :: i Integer :: year=0 , mon=0 , day=0 , hour=0 , min=0 , sec=0 call Date2UnixTime( 2014 , 6 , 20 , 21 , 10 , 17 , i ) write(*,'(a,g0,3x,a,z8)') 'Unix Time:' , i , '0x' , i call UnixTime2Date( i, year , mon , day , hour , min , sec ) write(*,*) 'Date:' , year , mon , day , hour , min , sec End Program www_fcode_cn Subroutine UnixTime2Date( iUnixTime, year , mon , day , hour , min , sec ) !// Convert UnixTime ( Seconds since 1970 ) to Date and time !// Range From 1970 to January 19, 2038 03:14:07 !// write by gao@fcode.cn @@ www.fcode.cn Implicit None Integer , Intent(IN) :: iUnixTime Integer , Intent(OUT) :: year , mon , day , hour , min , sec integer uDays , uSecs , mDay , n real rDay uDays = int(iUnixTime/86400) uSecs = mod(iUnixTime,86400) mDay = uDays + 40587 year = 1858 + int( (mDay + 321.51) / 365.25) rDay = aint( mod(mDay + 262.25, 365.25) ) + 0.5 mon = 1 + int(mod(rDay / 30.6 + 2.0, 12.0) ) day = 1 + int(mod(rDay,30.6)) n = uSecs sec = mod(n, 60) n = n / 60 min = mod(n, 60) hour = n / 60 End Subroutine UnixTime2Date Subroutine Date2UnixTime( year , mon , day , hour , min , sec , iUnixTime ) !// Convert Date and time to UnixTime ( Seconds since 1970 ) !// Range From 1970 to January 19, 2038 03:14:07 !// write by gao@fcode.cn @@ www.fcode.cn Implicit None Integer , Intent(IN) :: year , mon , day , hour , min , sec Integer , Intent(OUT) :: iUnixTime integer :: iy , im integer :: a real :: jd if ( mon > 2 ) then iy = year im = mon else iy = year - 1 im = mon + 12 end if a = INT(iy / 100) a = 2 - a + INT(a/4) JD = INT(365.25*(iy + 4716)) + INT(30.60001*(im + 1)) + day + a -1524.5 iUnixTime = Int( (JD-2440587.5)*86400) + hour*3600 + min*60 + sec End Subroutine Date2UnixTime