epoch_seconds_utc Function

private pure function epoch_seconds_utc(values) result(t)

date_and_time reports local civil time plus a time-zone offset in minutes. This internal helper converts the civil date to epoch days, adds the local time of day, and subtracts the time-zone offset so start and stop values can be differenced across day, month, or year boundaries. The function result is UTC epoch seconds represented with kind rk.

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: values(8)

Eight-element result from date_and_time(values=...).

Return Value real(kind=rk)


Calls

proc~~epoch_seconds_utc~~CallsGraph proc~epoch_seconds_utc epoch_seconds_utc proc~days_from_civil days_from_civil proc~epoch_seconds_utc->proc~days_from_civil

Called by

proc~~epoch_seconds_utc~~CalledByGraph proc~epoch_seconds_utc epoch_seconds_utc proc~dtimer_start timer%dtimer_start proc~dtimer_start->proc~epoch_seconds_utc proc~dtimer_stop timer%dtimer_stop proc~dtimer_stop->proc~epoch_seconds_utc proc~run_test25 run_test25 proc~run_test25->proc~dtimer_start proc~run_test25->proc~dtimer_stop proc~run_test26 run_test26 proc~run_test26->proc~dtimer_start proc~run_test26->proc~dtimer_stop proc~run_test27 run_test27 proc~run_test27->proc~dtimer_start proc~run_test27->proc~dtimer_stop proc~run_test28 run_test28 proc~run_test28->proc~dtimer_start proc~run_test28->proc~dtimer_stop proc~run_test29 run_test29 proc~run_test29->proc~dtimer_start proc~run_test29->proc~dtimer_stop proc~run_test30 run_test30 proc~run_test30->proc~dtimer_start proc~run_test30->proc~dtimer_stop program~example5 example5 program~example5->proc~dtimer_start program~example5->proc~dtimer_stop program~example6 example6 program~example6->proc~dtimer_start program~example6->proc~dtimer_stop program~check check program~check->proc~run_test25 program~check->proc~run_test26 program~check->proc~run_test27 program~check->proc~run_test28 program~check->proc~run_test29 program~check->proc~run_test30

Source Code

   pure real(rk) function epoch_seconds_utc(values) result(t)
      integer, intent(in) :: values(8)
         !! Eight-element result from `date_and_time(values=...)`.
      integer(ik) :: y
         !! Year extracted from `values(1)`.
      integer(ik) :: m
         !! Month extracted from `values(2)`.
      integer(ik) :: d
         !! Day extracted from `values(3)`.
      integer(ik) :: days
         !! Signed day count relative to 1970-01-01.
      integer(ik) :: secs
         !! Whole seconds from the local civil date and time fields.
      integer :: tzmin
         !! Time-zone offset in minutes east of UTC.

      y = int(values(1), ik)
      m = int(values(2), ik)
      d = int(values(3), ik)

      tzmin = values(4)
      if (abs(tzmin) > 24*60) tzmin = 0

      days = days_from_civil(y, m, d)
      secs = days * 86400_ik + &
             int(values(5), ik) * 3600_ik + &
             int(values(6), ik) * 60_ik + &
             int(values(7), ik)

      t = real(secs, rk) + real(values(8), rk) / 1000.0_rk - real(tzmin, rk) * 60.0_rk
   end function epoch_seconds_utc