17
18
19
20
21
22
23
24
26 use dc_string, only: tochar, cprintf, stoa, roundnum
27 use dc_message, only: messagenotify
28 implicit none
29 character(STRING):: result
30
31
32
33
34
35
36
37 integer, intent(in):: year
38 integer, intent(in):: month
39 integer, intent(in):: day
40 integer, intent(in):: hour
41 integer, intent(in):: min
42 real(DP), intent(in):: sec
43 character(*), intent(in), optional:: zone
44 integer:: csec_len
45 character(TOKEN):: csec, zonew
46continue
47
48 if ( present(zone) ) then
49 zonew = zone
50 else
51 zonew = ''
52 end if
53
54 csec = tochar(sec)
55 csec = roundnum( csec )
56 if ( trim(csec) == '-0.' ) csec = '0.'
57 do while ( index('123456789.', csec(len_trim(csec):len_trim(csec)) ) == 0 )
58 if ( len_trim(csec) < 2 ) exit
59 csec = csec(1:len_trim(csec)-1)
60 end do
61 if (int(sec) > -1 .and. int(sec) < 10) csec = '0' // csec
62 csec_len = len(trim(adjustl(csec)))
63 if (csec(csec_len:csec_len) == '.') csec = csec(1:csec_len-1)
64
65 result = cprintf('%04d-%02d-%02dT%02d:%02d:%c%c', &
66 & i=(/year, month, day, hour, min/), &
67 & c1=trim(csec), c2=trim(zonew))
68
Provides kind type parameter values.
integer, parameter, public token
Character length for word, token
integer, parameter, public dp
Double Precision Real number
integer, parameter, public string
Character length for string