AddSeconds Function

public function AddSeconds(time1, step) result(time2)

Adds the specified number of seconds to the value of this instance. If number of seconds is a negative number, the amount is subtracted

Arguments

Type IntentOptional Attributes Name
type(DateTime), intent(in) :: time1
integer, intent(in) :: step

Return Value type(DateTime)


Contents

Source Code


Variables

Type Visibility Attributes Name Initial
integer, public :: maxDay

Source Code

FUNCTION AddSeconds &
!
(time1, step) &
!
RESULT (time2)

IMPLICIT NONE

! Arguments with intent(in):
TYPE (DateTime), INTENT(IN) :: time1
INTEGER, INTENT(IN) :: step

! Local variables:
TYPE (DateTime):: time2
INTEGER  :: maxDay
!------------end of declaration------------------------------------------------

time2 = time1
IF(step >= 0) THEN
  time2 % second = time2 % second + step
  IF(time2 % second >= 60) THEN
    time2 % minute = time2 % minute  + INT ( time2 % second / 60 )
    time2 % second = time2 % second   - INT ( time2 % second / 60 ) * 60
    IF(time2 % minute >= 60) THEN
      time2 % hour = time2 % hour  + INT ( time2 % minute / 60)
      time2 % minute = time2 % minute - INT(time2%minute / 60) * 60
      IF(time2 % hour >= 24) THEN
        time2 % day = time2 % day  + INT(time2 % hour / 24)
        time2 % hour = time2 % hour - INT(time2%hour / 24) * 24
        maxDay = DaysInMonth (time2 % month, time2 % year)
        DO WHILE (time2 % day > maxDay)
          time2 % month = time2 % month + 1
          time2 % day = time2 % day - maxDay
          IF ( time2 % month == 13) THEN
            time2 % year = time2 % year + 1
            time2 % month = 1
          END IF
          maxDay = DaysInMonth (time2 % month, time2 % year)
        END DO
      END IF
    END IF
  END IF
ELSE
  time2 % second = time2 % second + step
  IF(time2 % second < 0) THEN
    time2 % minute = time2 % minute + INT(time2 % second / 60) - 1
    time2 % second = time2 % second + (-INT(time2 % second / 60) + 1) * 60
    IF(time2 % second == 60) THEN
      time2 % second = 0
      time2 % minute = time2 % minute + 1
    END IF
    IF(time2 % minute < 0) THEN
      time2 % hour = time2 % hour + INT(time2 % minute / 60) - 1				
      time2 % minute = time2 % minute + (-INT(time2 % minute / 60) + 1) * 60
      IF(time2 % minute == 60) THEN
        time2 % minute = 0
        time2 % hour = time2 % hour + 1
      END IF
      IF(time2 % hour < 0) THEN
        time2 % day = time2 % day + INT(time2 % hour / 24) - 1
        time2 % hour = time2 % hour + (-INT(time2 % hour / 24) + 1) * 24
        IF(time2 % hour == 24) THEN
          time2 % hour = 0
          time2 % day = time2 % day + 1
        END IF
        DO WHILE (time2 % day <= 0)
          IF(time2 % month - 1 <= 0) time2 % month = 13
            maxDay = DaysInMonth(time2 % month - 1,time2 % year)
            time2 % month = time2 % month - 1
            time2 % day = time2 % day + maxDay
            IF(time2%month == 12) THEN
              time2 % year = time2 % year - 1
            END IF
            maxDay = DaysInMonth(time2 % month,time2 % year)
        END DO
      END IF
    END IF
  END IF
END IF

CALL DateCheck (time2)
	
END FUNCTION AddSeconds