11 use iso_c_binding,
only : c_short, c_int, c_long, c_float, c_double, c_bool
23 public ::
assignment(=)
24 interface assignment(=)
26 end interface assignment(=)
31 end interface operator(>)
36 end interface operator(<)
40 integer (c_short) :: imonth = 0
41 integer (c_short) :: iday = 0
42 integer (c_int) :: iyear = 0
43 integer (c_short) :: ihour = 0
44 integer (c_short) :: iminute = 0
45 integer (c_short) :: isecond = 0
46 integer (c_int) :: iwateryearhigh = 0
47 integer (c_int) :: iwateryearlow = 0
48 integer (c_long) :: ijulianday = 0
49 real (c_double) :: djuliandate = 0.0_c_double
138 character (len=3) :: sname
139 character (len=9) :: sfullname
140 integer (c_int) :: istart
141 integer (c_int) :: iend
142 integer (c_int) :: imonth
143 integer (c_int) :: inumdays
149 [
month_t(
'Jan',
'January ', 1, 31, 1, 31), &
150 month_t(
'Feb',
'February ', 32, 59, 2, 29), &
151 month_t(
'Mar',
'March ', 60, 90, 3, 31), &
152 month_t(
'Apr',
'April ', 91, 120, 4, 30), &
153 month_t(
'May',
'May ', 121, 151, 5, 31), &
154 month_t(
'Jun',
'June ', 152, 181, 6, 30), &
155 month_t(
'Jul',
'July ', 182, 212, 7, 31), &
156 month_t(
'Aug',
'August ', 213, 243, 8, 31), &
157 month_t(
'Sep',
'September', 244, 273, 9, 30), &
158 month_t(
'Oct',
'October ', 274, 304, 10, 31), &
159 month_t(
'Nov',
'November ', 305, 334, 11, 30), &
160 month_t(
'Dec',
'December ', 335, 365, 12, 31) ]
168 character (len=*),
intent(in) :: sDateFormat
178 character (len=*),
intent(in) :: sTimeFormat
189 character (len=*),
intent(in),
optional :: sDateFormat
192 character (len=14) :: sDateFmt
193 character (len=6),
parameter :: DELIMITERS =
"/-_\. "
195 if(
present(sdateformat) )
then
196 sdatefmt = sdateformat
203 iscanmm1 = scan(string=sdatefmt,set=
"Mm")
205 iscandd1 = scan(string=sdatefmt,set=
"Dd")
209 iscandelim1 = scan(string=trim(sdatefmt), set=delimiters)
215 "Failed to properly parse the date format string "//
dquote(sdateformat), &
229 character (len=*),
intent(in),
optional :: sTimeFormat
232 character (len=14) :: sTimeFmt
234 if(
present(stimeformat) )
then
235 stimefmt = stimeformat
243 iscanmin1 = scan(string=stimefmt,set=
"M")
245 iscansec1 = scan(string=stimefmt,set=
"S")
251 "Failed to properly parse the time format string "//
dquote(stimeformat), &
261 character (len=*),
intent(in) :: sString
262 character (len=*),
intent(in),
optional :: sFilename
263 integer (c_int),
intent(in),
optional :: iLinenumber
266 integer (c_int) :: iStat
267 integer (c_int) :: iMonth
268 integer (c_int) :: iDay
269 integer (c_int) :: iYear
270 integer (c_int) :: iMonthOffset, iDayOffset
271 character (len=256) :: sStr
272 character (len=256) :: sMonth, sDay, sYear, sBuf
273 character (len=256) :: sFilename_l
274 integer (c_int) :: iLinenumber_l
276 if (
present( sfilename) )
then
277 sfilename_l = sfilename
279 sfilename_l =
"<unknown>"
282 if (
present( ilinenumber ) )
then
283 ilinenumber_l = ilinenumber
285 ilinenumber_l = -9999
289 imonthoffset = 0; idayoffset = 0
291 sstr = trim(adjustl(sstring))
295 if(len_trim(sbuf) /= len_trim(smonth))
then
299 read(smonth,fmt=*, iostat = istat) imonth
301 if ( .not. (istat==0 .and. (imonth > 0 .and. imonth <= 12) ) )
then
304 "Error parsing month value. Parsed value: "//
squote(smonth)//
";"// &
305 " input date text: "//trim(sstr), __file__, __line__, sfilename_l, ilinenumber_l )
311 if(len_trim(sbuf) /= len_trim(sday))
then
315 read(sday, fmt=*, iostat = istat) iday
317 if ( .not. (istat==0 .and. (iday > 0 .and. iday <= 31) ) )
then
320 "Error parsing day value. Parsed value: "//trim(sday)//
";"// &
321 " input date text: "//trim(sstr),sfilename_l, ilinenumber_l, __file__, __line__ )
326 read(syear,fmt=*, iostat = istat) iyear
331 "Error parsing year value. Parsed value: "//trim(syear)//
";"// &
332 " input date text: "//trim(sstr),sfilename_l, ilinenumber_l, __file__, __line__ )
340 this%dJulianDate =
julian_day( imonth=imonth, iday=iday, iyear=iyear )
349 character (len=*),
intent(in) :: sString
353 integer (c_int) :: iStat
354 integer (c_int) :: iHour
355 integer (c_int) :: iMinute
356 integer (c_int) :: iSecond
357 integer (c_int) :: iOffset
359 character (len=256) :: sHour, sMinute, sSecond
362 character (len=256) :: sTimeFmt
363 character (len=256) :: sStr
364 character (len=256) :: sBuf
368 sstr = trim(adjustl(sstring))
373 if(len_trim(sbuf) /= len_trim(shour))
then
377 read(shour,fmt=*, iostat = istat) ihour
378 call assert(istat==0,
"Error parsing hour value - got "//trim(shour)//
";"// &
379 " time text: "//trim(sstr), __file__,__line__)
382 read(sminute,fmt=*, iostat = istat) iminute
383 call assert(istat==0,
"Error parsing minutes value - got "//trim(sminute)//
";"// &
384 " time text: "//trim(sstr), __file__,__line__)
388 read(ssecond,fmt=*, iostat = istat) isecond
389 call assert(istat==0,
"Error parsing hour value - got "//trim(ssecond)//
";"// &
390 " time text: "//trim(sstr), __file__,__line__)
396 this%iMinute = iminute
397 this%iSecond = isecond
399 this%dJulianDate = this%dJulianDate + real( ihour, c_double) / 24.0_c_double &
400 + real( iminute, c_double) / 1440.0_c_double &
401 + real( isecond, c_double) / 86400.0_c_double
403 this%iJulianDay = int(this%dJulianDate, c_long)
413 if(this%iMonth > 9)
then
414 this%iWaterYearHigh = this%iYear + 1
416 this%iWaterYearHigh = &
420 if(this%iMonth < 4)
then
421 this%iWaterYearLow = this%iYear - 1
423 this%iWaterYearLow = this%iYear
471 iHour, iMinute, iSecond)
474 integer (c_int),
intent(in),
optional :: iMonth
475 integer (c_int),
intent(in),
optional :: iDay
476 integer (c_int),
intent(in),
optional :: iYear
477 integer (c_int),
intent(in),
optional :: iHour
478 integer (c_int),
intent(in),
optional :: iMinute
479 integer (c_int),
intent(in),
optional :: iSecond
481 if(
present(imonth) ) this%iMonth = imonth
482 if(
present(iday) ) this%iDay = iday
483 if(
present(iyear) ) this%iYear = iyear
484 if(
present(ihour) ) this%iHour = ihour
485 if(
present(iminute) ) this%iMinute = iminute
486 if(
present(isecond) ) this%iSecond = isecond
488 this%dJulianDate = real(
julian_day( int(this%iYear, c_int), &
489 int(this%iMonth, c_int), &
490 int(this%iDay, c_int) ), c_double) + &
491 real(this%iHour, c_double) / 24._c_double + &
492 real(this%iMinute, c_double) / 1440._c_double + &
493 real(this%iSecond, c_double) / 86400._c_double
497 this%iJulianDay = int(this%dJulianDate, c_long)
508 integer (c_int) :: iMonth
509 integer (c_int) :: iDay
510 integer (c_int) :: iYear
511 integer (c_int) :: iHour
512 integer (c_int) :: iMinute
513 integer (c_int) :: iSecond
514 integer (c_int) :: iJulianDay
516 real(c_double) :: rHour, rMinute, rSecond
518 ijulianday = this%getJulianDay()
526 rhour = this%getFractionOfDay() * 24._c_double
527 ihour = int(rhour, c_int)
530 rminute = (rhour - real(ihour, c_double) ) * 60._c_double
531 iminute = int(rminute, c_int)
534 rsecond = ( rminute - real(iminute, c_double) ) * 60._c_double
535 isecond = int(rsecond, c_int)
538 this%iMinute = iminute
577 integer (c_int),
value :: ijd
578 integer (c_int),
intent(inout) :: iyear, imonth, iday
579 integer (c_int),
intent(in),
optional :: iorigin
581 integer (c_int) ii,ij,ik,il,in
582 integer (c_int) :: ioffset
584 if(
present(iorigin))
then
602 il= ijd + 68569_c_int
603 in= 4*il / 146097_c_int
604 il= il - (146097_c_int * in + 3_c_int)/4_c_int
605 ii= 4000_c_int * (il + 1_c_int) / 1461001_c_int
606 il= il - 1461_c_int * ii / 4_c_int + 31_c_int
607 ij= 80_c_int * il / 2447_c_int
608 ik= il - 2447_c_int * ij / 80_c_int
610 ij= ij + 2_c_int - 12_c_int * il
611 ii= 100_c_int * (in - 49_c_int) + ii + il
641function julian_day ( iYear, iMonth, iDay, iOrigin, sInputItemName )
result(iJD)
644 integer (c_int),
intent(in) :: iyear, imonth, iday
645 integer (c_int),
optional :: iorigin
646 character (len=*),
optional :: sinputitemname
650 integer (c_int) i,j,k
651 integer (c_int) :: ioffset
652 character (len=256) :: sbuf
653 character (len=:),
allocatable :: sinputitemname_
654 logical (c_bool) :: illegal_month, illegal_day
657 integer (c_int) :: ijd
660 illegal_month =
false
663 if (
present(sinputitemname))
then
664 sinputitemname_ = trim(sinputitemname)
666 sinputitemname_ =
"unspecified"
673 select case ( imonth )
675 case (1, 3, 5, 7, 8, 10, 12)
677 if ( iday < 1 .or. iday > 31 ) illegal_day =
true
681 if (
isleap( iyear) )
then
682 if ( iday < 1 .or. iday > 29 ) illegal_day =
true
684 if ( iday < 1 .or. iday > 28 ) illegal_day =
true
688 if ( iday < 1 .or. iday > 31 ) illegal_day =
true
696 if(
present(iorigin))
then
702 ijd= ( k-32075_c_int + 1461_c_int * (i + 4800_c_int + (j - 14_c_int) / 12_c_int) &
703 /4_c_int + 367_c_int * (j - 2_c_int - (j - 14_c_int)/ 12_c_int * 12_c_int) &
704 /12_c_int - 3_c_int *((i + 4900_c_int + (j - 14_c_int) &
705 /12_c_int)/100_c_int)/4_c_int ) - ioffset
707 if ( illegal_month .or. illegal_day )
then
713 call logs%write(
"input type: " + sinputitemname_, ilinesafter=1, itab=17)
715 sbuf =
"there was a problem converting month, day, year values to a Julian date: "
717 if ( illegal_month) sbuf = adjustl(trim(sbuf) +
" month value is illegal. ")
718 if ( illegal_day) sbuf = adjustl(trim(sbuf) +
" day value is illegal.")
720 call assert(
false, trim(sbuf), __file__, __line__)
737 logical(c_bool ) :: lresult
748 if( date1%dJulianDate > date2%dJulianDate ) lresult =
true
760 logical(c_bool ) :: lresult
771 if( date1%dJulianDate < date2%dJulianDate ) lresult =
true
783 logical(c_bool ) :: lresult
787 if( date1%dJulianDate <= date2%dJulianDate ) lresult =
true
799 logical(c_bool ) :: lresult
803 if( date1%dJulianDate >= date2%dJulianDate ) lresult =
true
815 logical(c_bool ) :: lresult
819 if( date1%getJulianDay() == date2%getJulianDay() .and. &
820 date1%iHour == date2%iHour .and. &
821 date1%iMinute == date2%iMinute .and. &
822 date1%iSecond == date2%iSecond)
then
837 integer (c_int) :: inumyears
838 integer (c_int) :: icount
841 integer (c_int) :: year_value
845 inumyears = date_max%iYear - date_min%iYear
847 if (inumyears == 0)
then
849 if (( date_min%isLeapYear() .and. &
850 (date_min%iMonth <= 2 .and. date_min%iDay <= 28)) &
851 .and. ((date_max%iMonth == 2 .and. date_min%iDay > 28) .or. date_max%iMonth >=3)) &
854 elseif (inumyears > 0)
then
856 if ( date_min%isLeapYear() .and. &
857 (date_min%iMonth == 1 .or. ( date_min%iMonth == 2 .and. date_min%iDay <= 28))) &
860 if ( date_max%isLeapYear() .and. &
861 (date_max%iMonth > 2 .or. ( date_max%iMonth == 2 .and. date_max%iDay > 28))) &
866 if (inumyears >=3)
then
868 do year_value=date_min%iYear+1, date_max%iYear-1
870 if (
isleap(year_value)) icount = icount + 1
885 date2%iMonth = date1%iMonth
886 date2%iDay = date1%iDay
887 date2%iYear = date1%iYear
888 date2%iHour = date1%iHour
889 date2%iMinute = date1%iMinute
890 date2%iSecond = date1%iSecond
891 date2%iWaterYearHigh = date1%iWaterYearHigh
892 date2%iWaterYearLow = date1%iWaterYearLow
893 date2%dJulianDate = date1%dJulianDate
894 date2%iJulianDay = date1%iJulianDay
904 real (c_double) :: rdelta
906 rdelta = date1%dJulianDate - date2%dJulianDate
915 real (c_float),
intent(in) :: fvalue
919 newdate%dJulianDate = date1%dJulianDate + real( fvalue, c_double)
920 newdate%iJulianDay = int(newdate%dJulianDate, c_long)
921 call newdate%calcGregorianDate()
930 real (c_float),
intent(in) :: fvalue
934 newdate%dJulianDate = date1%dJulianDate - real( fvalue, c_double)
935 newdate%iJulianDay = int(newdate%dJulianDate, c_long)
936 call newdate%calcGregorianDate()
945 integer (c_int),
intent(in) :: ivalue
949 newdate%dJulianDate = date1%dJulianDate - real( ivalue, c_double)
950 newdate%iJulianDay = int(newdate%dJulianDate, c_long)
951 call newdate%calcGregorianDate()
960 character (len=20) :: sdatetimetext
962 write(sdatetimetext, fmt=
"(a3,' ',i2.2,' ',i4.4, 1x, i2.2,':',i2.2,':',i2.2)") &
963 months(this%iMonth)%sName, this%iDay, this%iYear, this%iHour, this%iMinute, this%iSecond
972 character (len=10) :: sdatetext
974 write(sdatetext, fmt=
"(i4.4,'-',i2.2,'-',i2.2)") &
975 this%iYear, this%iMonth, this%iDay
984 character (len=10) :: sdatetext
987 integer (c_int),
dimension(5) :: istat
990 write(sdatetext(
iscanmm1:
iscanmm2),fmt=
"(i2.2)", iostat=istat(1)) this%iMonth
994 fmt=
"(a1)",iostat=istat(4)) &
997 fmt=
"(a1)",iostat=istat(5)) &
1000 call assert(all(istat==0),
"Problem parsing the date format '"// &
1011 character (len=8) :: stimetext
1013 write(stimetext,fmt=
"(i2.2,':',i2.2':',i2.2)") this%iHour, this%iMinute, this%iSecond
1024 character (len=19) :: sdatetimetext
1032 character (len=32) :: sbuf
1034 integer (c_int),
dimension(5) :: istat
1063 write(sdatetimetext(
iscanmm1:
iscanmm2),fmt=
"(i2.2)", iostat=istat(1)) this%iMonth
1064 write(sdatetimetext(
iscandd1:
iscandd2),fmt=
"(i2.2)", iostat=istat(2)) this%iDay
1067 fmt=
"(a1)",iostat=istat(4)) &
1070 fmt=
"(a1)",iostat=istat(5)) &
1073 call assert(all(istat==0),
"Problem parsing the date format '"// &
1077 write(sbuf,fmt=
"(1x,i2.2,':',i2.2':',i2.2)") this%iHour, this%iMinute, this%iSecond
1080 sdatetimetext = trim(sdatetimetext) // trim(sbuf)
1094 character (len=16) :: sDateText
1095 character (len=16) :: sTimeText
1096 integer (c_int),
dimension(8) :: iValues
1098 call date_and_time(sdatetext, stimetext)
1099 call date_and_time(values = ivalues)
1101 call this%setDateFormat(
"YYYYMMDD")
1102 call this%setTimeFormat(
"HHMMSS")
1104 call this%parseDate(sdatetext)
1105 call this%parseTime(stimetext)
1106 call this%calcJulianDay()
1107 this%dJulianDate = this%dJulianDate + &
1108 (real(ivalues(8), c_double) / 86400_c_double / 1000_c_double)
1110 call this%setDateFormat()
1111 call this%setTimeFormat()
1198 real (c_double),
intent(in) :: dValue
1200 this%dJulianDate = dvalue
1201 this%iJulianDay = int(dvalue, c_long)
1203 call this%calcGregorianDate()
1212 integer (c_int) :: ijulianday
1214 ijulianday = int(this%dJulianDate, c_int)
1223 real (c_double) :: dfractionofday
1225 dfractionofday = this%dJulianDate - real( int(this%dJulianDate, c_long ), c_double)
1234 integer (c_int) :: idaysinmonth
1237 integer (c_int),
dimension(12),
parameter :: inumberofdaysinmonth = &
1238 [31,28,31,30,31,30,31,31,30,31,30,31]
1240 idaysinmonth = inumberofdaysinmonth(this%iMonth)
1242 if (this%isLeapYear() )
then
1243 idaysinmonth = max(idaysinmonth, 29)
1253 integer (c_int) :: idaysinyear
1255 if (this%isLeapYear() )
then
1272 this%dJulianDate = this%dJulianDate + 365.25_c_double
1273 this%iJulianDay = int(this%dJulianDate, c_long)
1274 call this%calcGregorianDate()
1283 integer (c_int),
intent(in) :: newday
1286 call this%calcJulianDay()
1295 integer (c_int),
intent(in) :: newmonth
1297 this%iMonth = newmonth
1298 call this%calcJulianDay()
1307 integer (c_int),
intent(in) :: newyear
1309 this%iYear = newyear
1310 call this%calcJulianDay()
1322 if (this%iMonth < 12)
then
1323 this%iMonth = this%iMonth + 1
1326 this%iYear = this%iYear + 1
1329 call this%calcJulianDay()
1332 this%dJulianDate = this%dJulianDate - 1.0_c_double
1333 this%iJulianDay = int(this%dJulianDate, c_long)
1334 call this%calcGregorianDate()
1347 this%dJulianDate = this%dJulianDate - 365.25_c_double
1348 this%iJulianDay = int(this%dJulianDate, c_long)
1349 call this%calcGregorianDate()
1359 this%dJulianDate = this%dJulianDate + 1._c_double
1360 this%iJulianDay = int(this%dJulianDate, c_long)
1361 call this%calcGregorianDate()
1371 this%dJulianDate = this%dJulianDate - 1._c_double
1372 this%iJulianDay = int(this%dJulianDate, c_long)
1373 call this%calcGregorianDate()
1382 logical (c_bool) :: lisleapyear
1384 lisleapyear = ( mod(this%iYear, 4) == 0 .and. mod(this%iYear, 100) /= 0 ) .or. &
1385 ( mod(this%iYear, 400) == 0 .and. this%iYear /= 0 )
1393 character (len=*) :: smmddyyyy
1394 integer (c_int) :: ijd
1397 integer (c_int) :: imonth
1398 integer (c_int) :: iday
1399 integer (c_int) :: iyear
1400 character (len=256) :: sitem, sbuf
1401 integer (c_int) :: istat
1406 call chomp(sitem, sbuf,
"/-")
1407 read(sbuf,*,iostat = istat) imonth
1408 call assert(istat==0,
"Problem reading month value from string "//trim(smmddyyyy), &
1412 call chomp(sitem, sbuf,
"/-")
1413 read(sbuf,*,iostat=istat) iday
1414 call assert(istat==0,
"Problem reading day value from string "//trim(smmddyyyy), &
1418 call chomp(sitem, sbuf,
"/-")
1419 read(sbuf,*,iostat=istat) iyear
1420 call assert(istat==0,
"Problem reading year value from string "//trim(smmddyyyy), &
1431 character (len=*) :: smmdd
1432 character (len=*),
optional :: sinputitemname
1434 integer (c_int) :: idoy
1437 integer (c_int) :: imonth
1438 integer (c_int) :: iday
1439 integer (c_int) :: iyear
1440 character (len=256) :: sitem, sbuf
1441 integer (c_int) :: istat
1442 integer (c_int) :: ijd
1443 integer (c_int) :: istartingjd
1444 character (len=256) :: sinputitemname_l
1448 if (
present( sinputitemname ) )
then
1449 sinputitemname_l = trim( sinputitemname )
1451 sinputitemname_l =
"unknown"
1455 call chomp(sitem, sbuf,
"/-")
1456 read(sbuf,*,iostat = istat) imonth
1457 call assert(istat==0,
"Problem reading month value from string "//trim(smmdd), &
1458 __file__,__line__, &
1459 shints=
"The offending string was "//
squote(smmdd)//
", which was encountered " &
1460 //
"while attempting to read in "//
squote( sinputitemname_l ) )
1463 call chomp(sitem, sbuf,
"/-")
1464 read(sbuf,*,iostat=istat) iday
1465 call assert(istat==0,
"Problem reading day value from string "//trim(smmdd), &
1466 __file__,__line__, &
1467 shints=
"The offending string was "//
squote(smmdd)//
", which was encountered " &
1468 //
"while attempting to read in "//
squote( sinputitemname_l ) )
1474 idoy = ijd - istartingjd + 1
1482 character (len=*) :: smmddyyyy
1483 integer (c_int) :: idoy
1486 integer (c_int) :: imonth
1487 integer (c_int) :: iday
1488 integer (c_int) :: iyear
1489 character (len=256) :: sitem, sbuf
1490 integer (c_int) :: istat
1491 integer (c_int) :: ijd
1492 integer (c_int) :: istartingjd
1497 call chomp(sitem, sbuf,
"/-")
1498 read(sbuf,*,iostat = istat) imonth
1499 call assert(istat==0,
"Problem reading month value from string "//trim(smmddyyyy), &
1503 call chomp(sitem, sbuf,
"/-")
1504 read(sbuf,*,iostat=istat) iday
1505 call assert(istat==0,
"Problem reading day value from string "//trim(smmddyyyy), &
1509 call chomp(sitem, sbuf,
"/-")
1510 read(sbuf,*,iostat=istat) iyear
1511 call assert(istat==0,
"Problem reading year value from string "//trim(smmddyyyy), &
1517 idoy = ijd - istartingjd + 1
1526 integer (c_int) :: idoy
1528 idoy =
day_of_year( int( this%dJulianDate, c_int) )
1536 integer (c_int),
value :: ijd
1539 integer (c_int) :: ifirstday, ilastday, idoy
1540 integer (c_int) :: imonth, iday, iyear
1546 idoy = ijd - ifirstday + 1
1554 integer (c_int),
intent(in) :: iyear
1555 logical (c_bool) :: lresult
1557 lresult = ( mod(iyear, 4) == 0 .and. mod(iyear, 100) /= 0 ) .or. &
1558 ( mod(iyear, 400) == 0 .and. iyear /= 0 )
This module contains physical constants and convenience functions aimed at performing unit conversion...
logical(c_bool), parameter, public true
logical(c_bool), parameter, public false
integer(c_int), parameter, public itinyval
This module contains the DATETIME_T class and associated time and date-related routines,...
character(len=10) function write_list_date_fn(this)
subroutine system_time_to_date_sub(this)
integer(c_int), private iscanmin2
integer(c_int) function, public day_of_year(ijd)
character(len=14), public sdefault_time_format
logical(c_bool) function is_date_lt_or_equal_to(date1, date2)
integer(c_int), private iscandelim1
character(len=14), private stime_format
character(len=8) function write_list_time_fn(this)
real(c_double) function get_fraction_of_day_fn(this)
integer(c_int), private iscandd2
type(datetime_t) function, allocatable date_minus_float_fn(date1, fvalue)
subroutine set_julian_date_sub(this, dvalue)
Return the number of days in the given year.
subroutine date_plus_day_sub(this)
logical(c_bool) function is_date_less_than(date1, date2)
logical(c_bool) function is_date_equal_to(date1, date2)
integer(c_int) function, public mmdd2doy(smmdd, sinputitemname)
subroutine date_set_day_sub(this, newday)
subroutine calc_gregorian_date_sub(this)
integer(c_int), private iscanyyyy2
integer(c_int), private iscanhour1
logical(c_bool) function is_leap_year_fn(this)
subroutine assign_value_to_sub(date2, date1)
type(datetime_t) function, allocatable date_minus_int_fn(date1, ivalue)
character(len=19) function write_list_datetime_fn(this)
subroutine set_default_date_format(sdateformat)
subroutine calc_water_year_sub(this)
subroutine date_minus_year_sub(this)
integer(c_int), private iscandd1
integer(c_int) function mmddyyyy2julian(smmddyyyy)
subroutine set_default_time_format(stimeformat)
integer(c_int), private iscanyyyy1
integer(c_int), private iscanmin1
character(len=10) function write_pretty_date_fn(this)
character(len=14), private sdate_format
integer(c_int), private iscansec1
type(month_t), dimension(12), target, public months
Month information.
logical(c_bool) function is_date_gt_or_equal_to(date1, date2)
subroutine, public gregorian_date(ijd, iyear, imonth, iday, iorigin)
integer(c_int) function get_days_in_month_fn(this)
integer(c_int), private iscandelim2
subroutine set_time_format_indices(this, stimeformat)
subroutine date_set_year_sub(this, newyear)
integer(c_int), private iscanmm2
subroutine parse_text_to_time_sub(this, sstring)
character(len=14), public sdefault_date_format
type(datetime_t) function, allocatable date_plus_float_fn(date1, fvalue)
integer(c_int), private iscanmm1
subroutine set_date_format_indices(this, sdateformat)
integer(c_int) function get_julian_day_fn(this)
integer(c_int), private iscanhour2
subroutine date_minus_day_sub(this)
subroutine parse_text_to_date_sub(this, sstring, sfilename, ilinenumber)
integer(c_int) function, public count_leap_days_between_dates(date_min, date_max)
logical(c_bool) function, public isleap(iyear)
character(len=20) function write_pretty_datetime_fn(this)
integer(c_int) function get_day_of_year_fn(this)
subroutine date_set_month_sub(this, newmonth)
integer(c_int) function, public julian_day(iyear, imonth, iday, iorigin, sinputitemname)
integer(c_int), private iscansec2
integer(c_int) function mmddyyyy2doy(smmddyyyy)
integer(c_int) function get_days_in_year_fn(this)
subroutine date_advance_to_last_day_of_month_sub(this)
logical(c_bool) function is_date_greater_than(date1, date2)
real(c_double) function date_minus_date_fn(date1, date2)
subroutine calc_julian_day_sub(this, imonth, iday, iyear, ihour, iminute, isecond)
subroutine date_plus_year_sub(this)
type(logfile_t), public logs
Container for month name and length information.