ユリウス日と西暦の変換

caldat.f90

ユリウス日→西暦

subroutine caldat(JULIAN,IYYY,MONTH,DD)
! Description:
!
! Author: am
!
! Host: aofd30
! Directory: /work2/am/12.Work11/75.Mitsui/52.Vertical_Profile/src
!
! Revision history:
!  This file is created by /usr/local/mybin/nff.sh at 11:00 on 11-01-2011.
!  use
!  implicit none
      INTEGER,intent(in):: JULIAN
      integer,intent(out)::IYYY,MONTH,DD
!                                                                      
! NAME   IN/OUT DESCRIPTION                                            
!                                                                      
! JULIAN   I    THE JULIAN DAY                                         
! IYYY     O    THE YEAR                                               
! MONTH    O    THE MONTH (1 TO 12)                                    
! DD       O    THE DAY OF THE MONTH                                   
!                                                                      
      INTEGER IGREG
      PARAMETER (IGREG=2299161)
      INTEGER JALPHA,JA,JB,JC,JD,JE
!                                                                      
      IF (JULIAN .GE. IGREG) THEN
        JALPHA = INT(((JULIAN - 1867216) - 0.25)/36524.25)
        JA = JULIAN + 1 + JALPHA - INT(0.25*JALPHA)
      ELSE
        JA = JULIAN
      ENDIF
      JB = JA + 1524
      JC = INT(6680. + ((JB - 2439870) - 122.1)/365.25)
      JD = 365*JC + INT(0.25*JC)
      JE = INT((JB - JD)/30.6001)
      DD = JB - JD - INT(30.6001*JE)
      MONTH = JE - 1
      IF (MONTH .GT. 12) MONTH = MONTH - 12
      IYYY = JC - 4715
      IF (MONTH .GT. 2) IYYY = IYYY - 1
      IF (IYYY .LE. 0) IYYY = IYYY - 1
      RETURN
end subroutine caldat

julday.f90

西暦→ユリウス日

INTEGER FUNCTION JULDAY(IYYY,MONTH,DD) 
      INTEGER,intent(inout):: IYYY,MONTH,DD
!                                                                       
! NAME   IN/OUT DESCRIPTION                                             
!                                                                       
! IYYY     I    YEAR                                                    
! MONTH    I    MONTH (1 TO 12)                                         
! DD       I    DAY OF MONTH                                            
!                                                                       
      INTEGER IGREG 
      PARAMETER (IGREG = 15 + 31*(10 + 12*1582)) 
      INTEGER JY,JM,JA 
!                                                                       
      IF (IYYY .LT. 0) IYYY = IYYY + 1 
      IF (MONTH .GT. 2) THEN 
        JY = IYYY 
        JM = MONTH + 1 
      ELSE 
        JY = IYYY - 1 
        JM = MONTH + 13 
      ENDIF 
      JULDAY = INT(365.25*JY) + INT(30.6001*JM) + DD + 1720995 
      IF (DD + 31*(MONTH + 12*IYYY) .GE. IGREG) THEN 
        JA = INT(0.01*JY) 
        JULDAY = JULDAY + 2 - JA + INT(0.25*JA) 
      ENDIF 
      RETURN 
end function julday