Path: | src/dcdatetimeeval.f90 |
Last Update: | Wed Jul 20 18:22:22 JST 2005 |
Copyright (C) GFD Dennou Club, 2000. All rights reserved
time : | type(DC_DATETIME), intent(in) |
mon : | integer, intent(out) |
day : | integer, intent(out) |
sec : | double precision, intent(out) |
subroutine DCDateTimeEval(time, mon, day, sec) implicit none type(DC_DATETIME), intent(in):: time integer, intent(out):: mon, day double precision, intent(out):: sec integer:: year, month integer, parameter:: four_years = 365 * 4 + 1 integer, parameter:: four_century = 365 * 400 + 97 continue sec = time%sec if (caltype == CAL_CYCLIC) then day = modulo(dble(time%day - 1), cyclic_mdays) + 1 mon = (time%day - 1) / cyclic_mdays return endif if (caltype == CAL_NOLEAP) then day = modulo(time%day - 91, 365) year = (time%day - 91 - day) / 365 else if (caltype == CAL_JULIAN .or. time%day < 640196) then day = modulo(time%day - 92, four_years) year = (time%day - 92 - day) / four_years * 4 else day = modulo(time%day - 94, four_century) year = (time%day - 94 - day) / four_century * 400 if (day == four_century - 1) then year = year + 300 day = 36525 else year = year + day / 36524 * 100 day = modulo(day, 36524) endif year = year + day / four_years * 4 day = modulo(day, four_years) endif if (day == four_years - 1) then year = year + 3 day = 365 else year = year + day / 365 day = modulo(day, 365) endif endif day = day * 10 + 922 month = day / 306 mon = mod(month - 1, 12) + 1 year = year + (month - mon) / 12 day = mod(day, 306) / 10 + 1 end subroutine