127 elemental function datetime_new(year, month, day, hour, minute, second, millisecond)
result(that)
128 integer,
intent(in),
optional :: year
129 integer,
intent(in),
optional :: month
130 integer,
intent(in),
optional :: day
131 integer,
intent(in),
optional :: hour
132 integer,
intent(in),
optional :: minute
133 integer,
intent(in),
optional :: second
134 integer,
intent(in),
optional :: millisecond
137 that%year = 0_i2;
if (
present(year)) that%year = int(year, kind=i2)
138 that%month = 0_i1;
if (
present(month)) that%month = int(month, kind=i1)
139 that%day = 0_i1;
if (
present(day)) that%day = int(day, kind=i1)
140 that%hour = 0_i1;
if (
present(hour)) that%hour = int(hour, kind=i1)
141 that%minute = 0_i1;
if (
present(minute)) that%minute = int(minute, kind=i1)
142 that%second = 0_i1;
if (
present(second)) that%second = int(second, kind=i1)
143 that%millisecond = 0_i2;
if (
present(millisecond)) that%millisecond = int(millisecond, kind=i2)
164 function now()
result(res)
169 call date_and_time(values=values)
171 res%year = int(values(1), kind=i2)
172 res%month = int(values(2), kind=i1)
173 res%day = int(values(3), kind=i1)
174 res%hour = int(values(5), kind=i1)
175 res%minute = int(values(6), kind=i1)
176 res%second = int(values(7), kind=i1)
177 res%millisecond = int(values(8), kind=i2)
244 class(
datetime),
intent(inout) :: this
245 character(*),
intent(in) :: string
246 character(*),
intent(in),
optional :: fmt
250 character(256) :: errmsg
251 character(len(string)) :: tmp
252 character(:),
allocatable :: dftfmt
254 if (
present(fmt))
then
257 if (len_trim(string) == 10)
then
258 dftfmt =
'yyyy-MM-dd'
260 dftfmt =
'yyyy-MM-dd HH:mm:ss'
266 this%year = 0_i2; this%month = 0_i1; this%day = 0_i1
267 this%hour = 0_i1; this%minute = 0_i1; this%second = 0_i1; this%millisecond = 0_i2
271 select case (tmp(:3))
272 case (
'Jan'); tmp(:3) =
' 01'
273 case (
'Feb'); tmp(:3) =
' 02'
274 case (
'Mar'); tmp(:3) =
' 03'
275 case (
'Apr'); tmp(:3) =
' 04'
276 case (
'May'); tmp(:3) =
' 05'
277 case (
'Jun'); tmp(:3) =
' 06'
278 case (
'Jul'); tmp(:3) =
' 07'
279 case (
'Aug'); tmp(:3) =
' 08'
280 case (
'Sep'); tmp(:3) =
' 09'
281 case (
'Oct'); tmp(:3) =
' 10'
282 case (
'Nov'); tmp(:3) =
' 11'
283 case (
'Dec'); tmp(:3) =
' 12'
285 read(tmp(2:),
'(i2.2,1x,i2.2,1x,i4.4)', iostat=ierr, iomsg=errmsg) &
289 case (
'MMM-dd-yyyy HH:mm:ss',
'MMM-dd-yyyyTHH:mm:ss')
290 select case (tmp(:3))
291 case (
'Jan'); tmp(:3) =
' 01'
292 case (
'Feb'); tmp(:3) =
' 02'
293 case (
'Mar'); tmp(:3) =
' 03'
294 case (
'Apr'); tmp(:3) =
' 04'
295 case (
'May'); tmp(:3) =
' 05'
296 case (
'Jun'); tmp(:3) =
' 06'
297 case (
'Jul'); tmp(:3) =
' 07'
298 case (
'Aug'); tmp(:3) =
' 08'
299 case (
'Sep'); tmp(:3) =
' 09'
300 case (
'Oct'); tmp(:3) =
' 10'
301 case (
'Nov'); tmp(:3) =
' 11'
302 case (
'Dec'); tmp(:3) =
' 12'
304 read(tmp(2:),
'(i2.2,1x,i2.2,1x,i4.4,1x,i2.2,2(1x,i2.2))', iostat=ierr, iomsg=errmsg) &
312 read(tmp,
'(i4.4,1x,i2.2)', iostat=ierr, iomsg=errmsg) &
316 read(tmp,
'(i4.4,2(1x,i2.2))', iostat=ierr, iomsg=errmsg) &
321 read(tmp,
'(i2.2,1x,i2.2,1x, i4.4)', iostat=ierr, iomsg=errmsg) &
326 read(tmp,
'(i2.2,1x,i2.2,1x,i4.4)', iostat=ierr, iomsg=errmsg) &
330 case (
'yyyy-MM-ddTHH:mm:ss',
'yyyy-MM-dd HH:mm:ss')
331 read(tmp,
'(i4.4,2(1x,i2.2),1x,i2.2,2(1x,i2.2))', iostat=ierr, iomsg=errmsg) &
339 read(tmp,
'(i2.2,2(1x,i2.2))', iostat=ierr, iomsg=errmsg) &
346 this%year = 1970_i2; this%month = 1_i1; this%day = 1_i1
347 this%hour = 0_i1; this%minute = 0_i1; this%second = 0_i1; this%millisecond = 0_i2
359 character(*),
intent(in),
optional :: fmt
360 character(:),
allocatable :: res
362 character :: sep, dash
363 character(:),
allocatable :: dftfmt, tmp, tmp2
365 character(256) :: errmsg
367 if (
present(fmt))
then
370 dftfmt =
'yyyy-MM-ddTHH:mm:ss'
373 sep = merge(
'T',
' ', index(dftfmt,
'T') > 0)
374 dash = merge(
'-',
' ', index(dftfmt,
'-') > 0)
376 allocate(
character(25) :: res)
379 select case (this%month)
380 case (1); tmp =
'Jan'
381 case (2); tmp =
'Feb'
382 case (3); tmp =
'Mar'
383 case (4); tmp =
'Apr'
384 case (5); tmp =
'May'
385 case (6); tmp =
'Jun'
386 case (7); tmp =
'Jul'
387 case (8); tmp =
'Aug'
388 case (9); tmp =
'Sep'
389 case (10); tmp =
'Oct'
390 case (11); tmp =
'Nov'
391 case (12); tmp =
'Dec'
394 case (0); tmp2 =
'Sun'
395 case (1); tmp2 =
'Mon'
396 case (2); tmp2 =
'Tue'
397 case (3); tmp2 =
'Wed'
398 case (4); tmp2 =
'Thu'
399 case (5); tmp2 =
'Fri'
400 case (6); tmp2 =
'Sat'
404 case (
'MMM-dd-yyyy',
'MMM dd yyyy')
405 write(res,
'(a3,a1,i2.2,a1,i4.4)', iostat=ierr, iomsg=errmsg) &
411 case (
'MMM-ddd-yyyy',
'MMM ddd yyyy')
412 write(res,
'(a3,a1,a3," ",i2.2,a1,i4.4)', iostat=ierr, iomsg=errmsg) &
419 case (
'MMM-dd-yyyy HH:mm:ss',
'MMM-dd-yyyyTHH:mm:ss',
'MMM dd yyyy HH:mm:ss',
'MMM dd yyyyTHH:mm:ss')
420 write(res,
'(a3,a1,i2.2,a1,i4.4,a1,i2.2,2(":",i2.2))', iostat=ierr, iomsg=errmsg) &
429 case (
'MMM-ddd-yyyy HH:mm:ss',
'MMM-ddd-yyyyTHH:mm:ss',
'MMM ddd yyyy HH:mm:ss',
'MMM ddd yyyyTHH:mm:ss')
430 write(res,
'(a3,a1,a3," ",i2.2,a1,i4.4,a1,i2.2,2(":",i2.2))', iostat=ierr, iomsg=errmsg) &
440 case (
'yyyy-MM',
'yyyy MM')
441 write(res,
'(i4.4,a1,i2.2)', iostat=ierr, iomsg=errmsg) &
445 case (
'yyyy-MM-dd',
'yyyy MM dd')
446 write(res,
'(i4.4,2(a1,i2.2))', iostat=ierr, iomsg=errmsg) &
452 case (
'yyyy-MM-ddd',
'yyyy MM ddd')
453 write(res,
'(i4.4,a1,i2.2,a1,a3," ",i2.2)', iostat=ierr, iomsg=errmsg) &
460 case (
'dd-MM-yyyy',
'dd MM yyyy')
461 write(res,
'(i2.2,a1,i2.2,a1,i4.4)', iostat=ierr, iomsg=errmsg) &
467 case (
'ddd-MM-yyyy',
'ddd MM yyyy')
468 write(res,
'(a3,a1,i2.2," ",i2.2,a1,i4.4)', iostat=ierr, iomsg=errmsg) &
475 case (
'MM-dd-yyyy',
'MM dd yyyy')
476 write(res,
'(i2.2,a1,i2.2,a1,i4.4)', iostat=ierr, iomsg=errmsg) &
482 case (
'MM-ddd-yyyy',
'MM ddd yyyy')
483 write(res,
'(i2.2,a1,a3," ",i2.2,a1,i4.4)', iostat=ierr, iomsg=errmsg) &
490 case (
'yyyy-MM-ddTHH:mm:ss',
'yyyy-MM-dd HH:mm:ss',
'yyyy MM ddTHH:mm:ss',
'yyyy MM dd HH:mm:ss')
491 write(res,
'(i4.4,2(a1,i2.2),a1,i2.2,2(":",i2.2))', iostat=ierr, iomsg=errmsg) &
501 case (
'yyyy-MM-dddTHH:mm:ss',
'yyyy-MM-ddd HH:mm:ss',
'yyyy MM dddTHH:mm:ss',
'yyyy MM ddd HH:mm:ss')
502 write(res,
'(i4.4,a1,i2.2,a1,a3," ",i2.2,a1,i2.2,2(":",i2.2))', iostat=ierr, iomsg=errmsg) &
514 write(res,
'(i2.2,2(":",i2.2))', iostat=ierr, iomsg=errmsg) &
character(:) function, allocatable datetime_to_string(this, fmt)
Format datetime as string using flexible format codes Supports many common patterns including those r...