c UTCCON: converts between ESA's "unix time" and standard ISO UTC subroutine utccon( smjt, autc, mode) c SMJT (real*8) = Sun Modified Julian Time (= "Unix time"), UTC seconds c since 1970-01-01T00:00:00 UTC c AUTC (character*23) = ASCII standard ISO UTC specification (for now, c must be YYYY-MM-DD, not YYYY-DDD) c MODE: 1 = SMJT to AUTC c 2 = AUTC to SMJT implicit real*8 (a-h,o-z) character*(*) autc if (mode.le.1) then day = smjt/86400.0 - 10957.0 call dj2000( day, iyr, imo, idy, ihr, imi, sec) itsec = sec/10.0 sec = sec-10.0*itsec write( autc,1000) iyr, imo, idy, ihr, imi, itsec, sec 1000 format(i4,'-',i2.2,'-',i2.2,'T',i2.2,':',i2.2,':',i1,f5.3) else read( autc,1001) iyr, imo, idy, ihr, imi, sec 1001 format(i4,1X,i2.2,1X,i2.2,1X,i2.2,1X,i2.2,1X,f6.3) call jd2000( day, iyr, imo, idy, ihr, imi, sec) smjt = 86400.0*day + 946684800.0 endif return end c The routines DJ2000 and JD2000 are taken from ESA's OASW s/w module SUBROUTINE DJ2000(DAY,I,J,K,JHR,MI,SEC) CCP COMPUTES CALENDER DATE FROM MODIFIED JULIAN DAY 2000 CC VALID FOR DATES BETWEEN 1950/JAN/1 AND 2099/DEC/31. CC MJD(2000) = MJD(1950) - 18262.0 IS = 0 ON 2000/01/01 AT 00:00:00. CC CCI (REAL*8) DAY = MOD. JULIAN DAY, REFERRED TO 2000 (MAY BE NEGATIVE). CCO (INTEGERS): I=YEAR, J=MONTH, K=DAY, JHR=HOUR, MI=MINUTE CCO (REAL*8): SEC=SECOND. CC IMPLICIT REAL*8(A-H,O-Z) CC MAKE SURE TO ROUND-OFF ONLY DOWN, ALSO FOR NEGATIVE MJD: JDAY = DAY + 18262.D0 L = (4000*(JDAY + 18204))/1461001 N = JDAY - (1461*L)/4 + 18234 M = (80*N)/2447 K = N - (2447*M)/80 JJ = M/11 J = M + 2 - 12*JJ I = 1900 + L + JJ SEC = (DAY - DFLOAT(JDAY-18262))*24.D0 JHR = SEC SEC = (SEC - DFLOAT(JHR))*6.D1 MI = SEC SEC = (SEC - DFLOAT(MI))*6.D1 RETURN END SUBROUTINE JD2000(DAY,JEAR,MONTH,KDAY,JHR,MI,SEC) CCP GIVES THE NEW MOD. JULIAN DAY (MJD=0.0 ON 2000/JAN/1 AT 0:00:00) CCP FOR INPUT CALENDAR DATES BETWEEN 1950/JAN/1 AND 2099/DEC/31. CC CC MJD(2000) = MJD(1950) - 18262.0 CC CCI (INT*4) JEAR = YEAR WITH 2 OR 4 DIGITS; 2 DIGITS => 1950 TO 2049 CCt (INT*4) MONTH = MONTH CCI (INT*4) KDAY = DAY CCI (INT*4) JHR = HOUR CCI (INT*4) MI = MINUTE CCI (REAL*8) SEC = SECOND. CCO (REAL*8) DAY = MOD. JUL. DAY, REFERRED TO 2000. CC IMPLICIT REAL*8(A-H,O-Z) JJ = (14 - MONTH)/12 L = JEAR - JJ - 1900*(JEAR/1900) + 100*(2000/(JEAR+1951)) DAY = KDAY-36496+(1461*L)/4+(367*(MONTH-2+JJ*12))/12 DAY = DAY + (DFLOAT((JHR*60 + MI)*60) + SEC)/864.D2 RETURN END