! -------------------------------------------------------------------- ! PROGRAM YYYYMMDDConversion: ! This program uses an external subroutine Conversion() to convert ! an integer value in the form of YYYYMMDD to Year, Month and Day. ! -------------------------------------------------------------------- PROGRAM YYYYMMDDConversion IMPLICIT NONE INTERFACE ! interface block SUBROUTINE Conversion(Number, Year, Month, Day) INTEGER, INTENT(IN) :: Number INTEGER, INTENT(OUT) :: Year, Month, Day END SUBROUTINE Conversion END INTERFACE INTEGER :: YYYYMMDD, Y, M, D DO ! loop until a zero is seen WRITE(*,*) "A YYYYMMDD (e.g., 19971027) please (0 to stop) -> " READ(*,*) YYYYMMDD ! read in the value IF (YYYYMMDD == 0) EXIT ! if 0, then bail out CALL Conversion(YYYYMMDD, Y, M, D) ! do conversation WRITE(*,*) "Year = ", Y ! display results WRITE(*,*) "Month = ", M WRITE(*,*) "Day = ", D WRITE(*,*) END DO END PROGRAM YYYYMMDDConversion ! -------------------------------------------------------------------- ! SUBROUTINE Conversion(): ! This external subroutine takes an integer input Number in the ! form of YYYYMMDD and convert it to Year, Month and Day. ! -------------------------------------------------------------------- SUBROUTINE Conversion(Number, Year, Month, Day) IMPLICIT NONE INTEGER, INTENT(IN) :: Number INTEGER, INTENT(OUT) :: Year, Month, Day Year = Number / 10000 Month = MOD(Number, 10000) / 100 Day = MOD(Number, 100) END SUBROUTINE Conversion