MST

星途 面试题库

面试题:Fortran时间日期函数基础应用

在Fortran中,使用时间日期函数计算两个给定日期(例如2023 - 01 - 01和2023 - 12 - 31)之间相隔的天数,写出实现代码。
43.8万 热度难度
编程语言Fortran

知识考点

AI 面试

面试题答案

一键面试
program days_between_dates
    implicit none
    integer :: days
    integer, parameter :: year1 = 2023, month1 = 1, day1 = 1
    integer, parameter :: year2 = 2023, month2 = 12, day2 = 31
    days = days_between(year1, month1, day1, year2, month2, day2)
    write(*,*) '两个日期相隔的天数为:', days
contains
    function days_between(y1, m1, d1, y2, m2, d2) result(days)
        integer, intent(in) :: y1, m1, d1, y2, m2, d2
        integer :: days
        integer :: days1, days2
        days1 = days_in_year(y1)
        days2 = days_in_year(y2)
        days1 = days1 + days_from_start(y1, m1, d1)
        days2 = days2 + days_from_start(y2, m2, d2)
        days = abs(days1 - days2)
    end function days_between
    function days_from_start(year, month, day) result(days)
        integer, intent(in) :: year, month, day
        integer :: days
        integer :: i
        integer, dimension(12) :: days_per_month = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
        if (is_leap_year(year)) days_per_month(2) = 29
        days = 0
        do i = 1, month - 1
            days = days + days_per_month(i)
        end do
        days = days + day
    end function days_from_start
    function is_leap_year(year) result(is_leap)
        integer, intent(in) :: year
        logical :: is_leap
        if ((mod(year, 4) == 0 .and. mod(year, 100) /= 0) .or. mod(year, 400) == 0) then
            is_leap =.true.
        else
            is_leap =.false.
        end if
    end function is_leap_year
    function days_in_year(year) result(days)
        integer, intent(in) :: year
        integer :: days
        if (is_leap_year(year)) then
            days = -1
        else
            days = -2
        end if
    end function days_in_year
end program days_between_dates