28 character(len=*),
intent(in) :: date_in, dtime
29 character(len=14),
intent(out) :: date_out
31 integer :: ccyy, mm, dd, hh, nn, ss, dday, dh, dn, ds, gday, gsec
33 character(len=14) :: ccyymmddhhnnss
37 datelen = len_trim(ccyymmddhhnnss)
39 if (datelen == 8)
then
40 read(ccyymmddhhnnss(1:10), fmt=
'(i4, 2i2)') ccyy, mm, dd
44 else if (datelen == 10)
then
45 read(ccyymmddhhnnss(1:10), fmt=
'(i4, 3i2)') ccyy, mm, dd, hh
48 else if (datelen == 12)
then
49 read(ccyymmddhhnnss(1:12), fmt=
'(i4, 4i2)') ccyy, mm, dd, hh, nn
51 else if (datelen == 14)
then
52 read(ccyymmddhhnnss(1:14), fmt=
'(i4, 5i2)') ccyy, mm, dd, hh, nn, ss
54 stop
'wrong input date'
57 if (.not.
validdate(ccyy,mm,dd,hh,nn,ss))
then
58 write(0,*) trim(ccyymmddhhnnss)
59 stop
'Start date is not valid, or has wrong format'
62 call parsedt(dtime,dday,dh,dn,ds)
100 if (dday /= 0)
call change_date ( ccyy, mm, dd, dday)
102 write(ccyymmddhhnnss(1:14), fmt=
'(i4, 5i2.2)') ccyy, mm, dd, hh, nn, ss
107 date_out = ccyymmddhhnnss
115 integer,
intent(inout) :: ccyy, mm, dd
116 integer,
intent(in) :: delta
118 integer,
dimension(12) :: mmday
119 integer :: dday, direction
121 mmday = (/31,28,31,30,31,30,31,31,30,31,30,31/)
125 if (mod(ccyy,4) == 0)
then
128 if (mod(ccyy,100) == 0)
then
132 if (mod(ccyy,400) == 0)
then
138 direction = sign(1,delta)
153 elseif ( dd > mmday(mm))
then
169 character(len=*),
intent(in) :: datein
172 character(len=1 ) :: ch
176 do n = 1, len_trim(datein)
178 if (ch >=
'0' .and. ch <=
'9')
then
192 character(len=*),
intent(in) :: dt
193 integer,
intent(inout) :: dday, dh, dn, ds
195 character(len=1 ) :: ch
196 integer :: n,i,d,s,nounit
205 do n = 1, len_trim(dt)
209 read(ch,fmt=
'(i1)') i
234 if (nounit==1) dh=d*s
239 integer,
intent(in) :: year
241 if( mod(year,4) .ne. 0 )
then
245 if ( mod(year,100) == 0 .and. mod(year,400) .ne. 0 )
isleapyear=.false.
250 integer,
intent(in) :: ccyy,mm,dd,hh,nn,ss
256 if(ss > 59 .or. ss < 0 .or. &
257 nn > 59 .or. nn < 0 .or. &
258 hh > 23 .or. hh < 0 .or. &
260 mm > 12 .or. mm < 1 )
validdate = .false.
262 if (mm == 2 .and. ( dd > 29 .or. &
subroutine, public da_advance_time(date_in, dtime, date_out)
logical function isleapyear(year)
character(len=14) function parsedate(datein)
subroutine parsedt(dt, dday, dh, dn, ds)
subroutine change_date(ccyy, mm, dd, delta)
logical function validdate(ccyy, mm, dd, hh, nn, ss)