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__ )
336 this%iMonth = int(imonth, c_short)
338 this%iDay = int(iday, c_short)
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) :: sStr
363 character (len=256) :: sBuf
367 sstr = trim(adjustl(sstring))
372 if(len_trim(sbuf) /= len_trim(shour))
then
376 read(shour,fmt=*, iostat = istat) ihour
377 call assert(istat==0,
"Error parsing hour value - got "//trim(shour)//
";"// &
378 " time text: "//trim(sstr), __file__,__line__)
381 read(sminute,fmt=*, iostat = istat) iminute
382 call assert(istat==0,
"Error parsing minutes value - got "//trim(sminute)//
";"// &
383 " time text: "//trim(sstr), __file__,__line__)
387 read(ssecond,fmt=*, iostat = istat) isecond
388 call assert(istat==0,
"Error parsing hour value - got "//trim(ssecond)//
";"// &
389 " time text: "//trim(sstr), __file__,__line__)
394 this%iHour = int(ihour, c_short)
395 this%iMinute = int(iminute, c_short)
396 this%iSecond = int(isecond, c_short)
398 this%dJulianDate = this%dJulianDate + real( ihour, c_double) / 24.0_c_double &
399 + real( iminute, c_double) / 1440.0_c_double &
400 + real( isecond, c_double) / 86400.0_c_double
402 this%iJulianDay = int(this%dJulianDate, c_long)
412 if(this%iMonth > 9)
then
413 this%iWaterYearHigh = this%iYear + 1
415 this%iWaterYearHigh = &
419 if(this%iMonth < 4)
then
420 this%iWaterYearLow = this%iYear - 1
422 this%iWaterYearLow = this%iYear
470 iHour, iMinute, iSecond)
473 integer (c_int),
intent(in),
optional :: iMonth
474 integer (c_int),
intent(in),
optional :: iDay
475 integer (c_int),
intent(in),
optional :: iYear
476 integer (c_int),
intent(in),
optional :: iHour
477 integer (c_int),
intent(in),
optional :: iMinute
478 integer (c_int),
intent(in),
optional :: iSecond
480 if(
present(imonth) ) this%iMonth = int(imonth, c_short)
481 if(
present(iday) ) this%iDay = int(iday, c_short)
482 if(
present(iyear) ) this%iYear = iyear
483 if(
present(ihour) ) this%iHour = int(ihour, c_short)
484 if(
present(iminute) ) this%iMinute = int(iminute, c_short)
485 if(
present(isecond) ) this%iSecond = int(isecond, c_short)
487 this%dJulianDate = real(
julian_day( int(this%iYear, c_int), &
488 int(this%iMonth, c_int), &
489 int(this%iDay, c_int) ), c_double) + &
490 real(this%iHour, c_double) / 24._c_double + &
491 real(this%iMinute, c_double) / 1440._c_double + &
492 real(this%iSecond, c_double) / 86400._c_double
496 this%iJulianDay = int(this%dJulianDate, c_long)
507 integer (c_int) :: iMonth
508 integer (c_int) :: iDay
509 integer (c_int) :: iYear
510 integer (c_int) :: iHour
511 integer (c_int) :: iMinute
512 integer (c_int) :: iSecond
513 integer (c_int) :: iJulianDay
515 real(c_double) :: rHour, rMinute, rSecond
517 ijulianday = this%getJulianDay()
522 this%iMonth = int(imonth, c_short)
523 this%iDay = int(iday, c_short)
525 rhour = this%getFractionOfDay() * 24._c_double
526 ihour = int(rhour, c_int)
529 rminute = (rhour - real(ihour, c_double) ) * 60._c_double
530 iminute = int(rminute, c_int)
533 rsecond = ( rminute - real(iminute, c_double) ) * 60._c_double
534 isecond = int(rsecond, c_int)
536 this%iHour = int(ihour, c_short)
537 this%iMinute = int(iminute, c_short)
538 this%iHour = int(isecond, c_short)
576 integer (c_int),
value :: ijd
577 integer (c_int),
intent(inout) :: iyear, imonth, iday
578 integer (c_int),
intent(in),
optional :: iorigin
580 integer (c_int) ii,ij,ik,il,in
581 integer (c_int) :: ioffset
583 if(
present(iorigin))
then
601 il= ijd + 68569_c_int
602 in= 4*il / 146097_c_int
603 il= il - (146097_c_int * in + 3_c_int)/4_c_int
604 ii= 4000_c_int * (il + 1_c_int) / 1461001_c_int
605 il= il - 1461_c_int * ii / 4_c_int + 31_c_int
606 ij= 80_c_int * il / 2447_c_int
607 ik= il - 2447_c_int * ij / 80_c_int
609 ij= ij + 2_c_int - 12_c_int * il
610 ii= 100_c_int * (in - 49_c_int) + ii + il
640function julian_day ( iYear, iMonth, iDay, iOrigin, sInputItemName )
result(iJD)
643 integer (c_int),
intent(in) :: iyear, imonth, iday
644 integer (c_int),
optional :: iorigin
645 character (len=*),
optional :: sinputitemname
649 integer (c_int) i,j,k
650 integer (c_int) :: ioffset
651 character (len=256) :: sbuf
652 character (len=:),
allocatable :: sinputitemname_
653 logical (c_bool) :: illegal_month, illegal_day
656 integer (c_int) :: ijd
659 illegal_month =
false
662 if (
present(sinputitemname))
then
663 sinputitemname_ = trim(sinputitemname)
665 sinputitemname_ =
"unspecified"
672 select case ( imonth )
674 case (1, 3, 5, 7, 8, 10, 12)
676 if ( iday < 1 .or. iday > 31 ) illegal_day =
true
680 if (
isleap( iyear) )
then
681 if ( iday < 1 .or. iday > 29 ) illegal_day =
true
683 if ( iday < 1 .or. iday > 28 ) illegal_day =
true
687 if ( iday < 1 .or. iday > 31 ) illegal_day =
true
695 if(
present(iorigin))
then
701 ijd= ( k-32075_c_int + 1461_c_int * (i + 4800_c_int + (j - 14_c_int) / 12_c_int) &
702 /4_c_int + 367_c_int * (j - 2_c_int - (j - 14_c_int)/ 12_c_int * 12_c_int) &
703 /12_c_int - 3_c_int *((i + 4900_c_int + (j - 14_c_int) &
704 /12_c_int)/100_c_int)/4_c_int ) - ioffset
706 if ( illegal_month .or. illegal_day )
then
712 call logs%write(
"input type: " + sinputitemname_, ilinesafter=1, itab=17)
714 sbuf =
"there was a problem converting month, day, year values to a Julian date: "
716 if ( illegal_month) sbuf = adjustl(trim(sbuf) +
" month value is illegal. ")
717 if ( illegal_day) sbuf = adjustl(trim(sbuf) +
" day value is illegal.")
719 call assert(
false, trim(sbuf), __file__, __line__)
736 logical(c_bool ) :: lresult
747 if( date1%dJulianDate > date2%dJulianDate ) lresult =
true
759 logical(c_bool ) :: lresult
770 if( date1%dJulianDate < date2%dJulianDate ) lresult =
true
782 logical(c_bool ) :: lresult
786 if( date1%dJulianDate <= date2%dJulianDate ) lresult =
true
798 logical(c_bool ) :: lresult
802 if( date1%dJulianDate >= date2%dJulianDate ) lresult =
true
814 logical(c_bool ) :: lresult
818 if( date1%getJulianDay() == date2%getJulianDay() .and. &
819 date1%iHour == date2%iHour .and. &
820 date1%iMinute == date2%iMinute .and. &
821 date1%iSecond == date2%iSecond)
then
836 integer (c_int) :: inumyears
837 integer (c_int) :: icount
840 integer (c_int) :: year_value
844 inumyears = date_max%iYear - date_min%iYear
846 if (inumyears == 0)
then
848 if (( date_min%isLeapYear() .and. &
849 (date_min%iMonth <= 2 .and. date_min%iDay <= 28)) &
850 .and. ((date_max%iMonth == 2 .and. date_min%iDay > 28) .or. date_max%iMonth >=3)) &
853 elseif (inumyears > 0)
then
855 if ( date_min%isLeapYear() .and. &
856 (date_min%iMonth == 1 .or. ( date_min%iMonth == 2 .and. date_min%iDay <= 28))) &
859 if ( date_max%isLeapYear() .and. &
860 (date_max%iMonth > 2 .or. ( date_max%iMonth == 2 .and. date_max%iDay > 28))) &
865 if (inumyears >=3)
then
867 do year_value=date_min%iYear+1, date_max%iYear-1
869 if (
isleap(year_value)) icount = icount + 1
884 date2%iMonth = date1%iMonth
885 date2%iDay = date1%iDay
886 date2%iYear = date1%iYear
887 date2%iHour = date1%iHour
888 date2%iMinute = date1%iMinute
889 date2%iSecond = date1%iSecond
890 date2%iWaterYearHigh = date1%iWaterYearHigh
891 date2%iWaterYearLow = date1%iWaterYearLow
892 date2%dJulianDate = date1%dJulianDate
893 date2%iJulianDay = date1%iJulianDay
903 real (c_double) :: rdelta
905 rdelta = date1%dJulianDate - date2%dJulianDate
914 real (c_float),
intent(in) :: fvalue
918 newdate%dJulianDate = date1%dJulianDate + real( fvalue, c_double)
919 newdate%iJulianDay = int(newdate%dJulianDate, c_long)
920 call newdate%calcGregorianDate()
929 real (c_float),
intent(in) :: fvalue
933 newdate%dJulianDate = date1%dJulianDate - real( fvalue, c_double)
934 newdate%iJulianDay = int(newdate%dJulianDate, c_long)
935 call newdate%calcGregorianDate()
944 integer (c_int),
intent(in) :: ivalue
948 newdate%dJulianDate = date1%dJulianDate - real( ivalue, c_double)
949 newdate%iJulianDay = int(newdate%dJulianDate, c_long)
950 call newdate%calcGregorianDate()
959 character (len=20) :: sdatetimetext
961 write(sdatetimetext, fmt=
"(a3,' ',i2.2,' ',i4.4, 1x, i2.2,':',i2.2,':',i2.2)") &
962 months(this%iMonth)%sName, this%iDay, this%iYear, this%iHour, this%iMinute, this%iSecond
971 character (len=10) :: sdatetext
973 write(sdatetext, fmt=
"(i4.4,'-',i2.2,'-',i2.2)") &
974 this%iYear, this%iMonth, this%iDay
983 character (len=10) :: sdatetext
986 integer (c_int),
dimension(5) :: istat
989 write(sdatetext(
iscanmm1:
iscanmm2),fmt=
"(i2.2)", iostat=istat(1)) this%iMonth
993 fmt=
"(a1)",iostat=istat(4)) &
996 fmt=
"(a1)",iostat=istat(5)) &
999 call assert(all(istat==0),
"Problem parsing the date format '"// &
1010 character (len=8) :: stimetext
1012 write(stimetext,fmt=
"(i2.2,':',i2.2,':',i2.2)") this%iHour, this%iMinute, this%iSecond
1023 character (len=19) :: sdatetimetext
1031 character (len=32) :: sbuf
1033 integer (c_int),
dimension(5) :: istat
1062 write(sdatetimetext(
iscanmm1:
iscanmm2),fmt=
"(i2.2)", iostat=istat(1)) this%iMonth
1063 write(sdatetimetext(
iscandd1:
iscandd2),fmt=
"(i2.2)", iostat=istat(2)) this%iDay
1066 fmt=
"(a1)",iostat=istat(4)) &
1069 fmt=
"(a1)",iostat=istat(5)) &
1072 call assert(all(istat==0),
"Problem parsing the date format '"// &
1076 write(sbuf,fmt=
"(1x,i2.2,':',i2.2,':',i2.2)") this%iHour, this%iMinute, this%iSecond
1079 sdatetimetext = trim(sdatetimetext) // trim(sbuf)
1093 character (len=16) :: sDateText
1094 character (len=16) :: sTimeText
1095 integer (c_int),
dimension(8) :: iValues
1097 call date_and_time(sdatetext, stimetext)
1098 call date_and_time(values = ivalues)
1100 call this%setDateFormat(
"YYYYMMDD")
1101 call this%setTimeFormat(
"HHMMSS")
1103 call this%parseDate(sdatetext)
1104 call this%parseTime(stimetext)
1105 call this%calcJulianDay()
1106 this%dJulianDate = this%dJulianDate + &
1107 (real(ivalues(8), c_double) / 86400_c_double / 1000_c_double)
1109 call this%setDateFormat()
1110 call this%setTimeFormat()
1197 real (c_double),
intent(in) :: dValue
1199 this%dJulianDate = dvalue
1200 this%iJulianDay = int(dvalue, c_long)
1202 call this%calcGregorianDate()
1211 integer (c_int) :: ijulianday
1213 ijulianday = int(this%dJulianDate, c_int)
1222 real (c_double) :: dfractionofday
1224 dfractionofday = this%dJulianDate - real( int(this%dJulianDate, c_long ), c_double)
1233 integer (c_int) :: idaysinmonth
1236 integer (c_int),
dimension(12),
parameter :: inumberofdaysinmonth = &
1237 [31,28,31,30,31,30,31,31,30,31,30,31]
1239 idaysinmonth = inumberofdaysinmonth(this%iMonth)
1241 if (this%isLeapYear() )
then
1242 idaysinmonth = max(idaysinmonth, 29)
1252 integer (c_int) :: idaysinyear
1254 if (this%isLeapYear() )
then
1271 this%dJulianDate = this%dJulianDate + 365.25_c_double
1272 this%iJulianDay = int(this%dJulianDate, c_long)
1273 call this%calcGregorianDate()
1282 integer (c_int),
intent(in) :: newday
1284 this%iDay = int(newday, c_short)
1285 call this%calcJulianDay()
1294 integer (c_int),
intent(in) :: newmonth
1296 this%iMonth = int(newmonth, c_short)
1297 call this%calcJulianDay()
1306 integer (c_int),
intent(in) :: newyear
1308 this%iYear = newyear
1309 call this%calcJulianDay()
1321 if (this%iMonth < 12)
then
1322 this%iMonth = int(this%iMonth + 1, c_short)
1325 this%iYear = this%iYear + 1
1328 call this%calcJulianDay()
1331 this%dJulianDate = this%dJulianDate - 1.0_c_double
1332 this%iJulianDay = int(this%dJulianDate, c_long)
1333 call this%calcGregorianDate()
1346 this%dJulianDate = this%dJulianDate - 365.25_c_double
1347 this%iJulianDay = int(this%dJulianDate, c_long)
1348 call this%calcGregorianDate()
1358 this%dJulianDate = this%dJulianDate + 1._c_double
1359 this%iJulianDay = int(this%dJulianDate, c_long)
1360 call this%calcGregorianDate()
1370 this%dJulianDate = this%dJulianDate - 1._c_double
1371 this%iJulianDay = int(this%dJulianDate, c_long)
1372 call this%calcGregorianDate()
1381 logical (c_bool) :: lisleapyear
1383 lisleapyear = ( mod(this%iYear, 4) == 0 .and. mod(this%iYear, 100) /= 0 ) .or. &
1384 ( mod(this%iYear, 400) == 0 .and. this%iYear /= 0 )
1394 character (len=*) :: smmdd
1395 character (len=*),
optional :: sinputitemname
1397 integer (c_int) :: idoy
1400 integer (c_int) :: imonth
1401 integer (c_int) :: iday
1402 character (len=256) :: sitem, sbuf
1403 integer (c_int) :: istat
1404 integer (c_int) :: ijd
1405 integer (c_int) :: istartingjd
1406 character (len=256) :: sinputitemname_l
1410 if (
present( sinputitemname ) )
then
1411 sinputitemname_l = trim( sinputitemname )
1413 sinputitemname_l =
"unknown"
1417 call chomp(sitem, sbuf,
"/-")
1418 read(sbuf,*,iostat = istat) imonth
1419 call assert(istat==0,
"Problem reading month value from string "//trim(smmdd), &
1420 __file__,__line__, &
1421 shints=
"The offending string was "//
squote(smmdd)//
", which was encountered " &
1422 //
"while attempting to read in "//
squote( sinputitemname_l ) )
1425 call chomp(sitem, sbuf,
"/-")
1426 read(sbuf,*,iostat=istat) iday
1427 call assert(istat==0,
"Problem reading day value from string "//trim(smmdd), &
1428 __file__,__line__, &
1429 shints=
"The offending string was "//
squote(smmdd)//
", which was encountered " &
1430 //
"while attempting to read in "//
squote( sinputitemname_l ) )
1436 idoy = ijd - istartingjd + 1
1449 integer (c_int) :: idoy
1451 idoy =
day_of_year( int( this%dJulianDate, c_int) )
1459 integer (c_int),
value :: ijd
1462 integer (c_int) :: ifirstday, idoy
1463 integer (c_int) :: imonth, iday, iyear
1469 idoy = ijd - ifirstday + 1
1477 integer (c_int),
intent(in) :: iyear
1478 logical (c_bool) :: lresult
1480 lresult = ( mod(iyear, 4) == 0 .and. mod(iyear, 100) /= 0 ) .or. &
1481 ( 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
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 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.