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 |
Intent | Optional | Attributes |
|
Name |
|
type(DateTime),
|
intent(in) |
|
|
:: |
time1 |
|
integer,
|
intent(in) |
|
|
:: |
step |
|
Return Value
type(DateTime)
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