15 & year, month, day, hour, min, sec, zone, &
27 use dc_message
, only: messagenotify
28 use dc_string
, only: lchar, stoi, stod
29 use dc_trace
, only: beginsub, endsub, dbgmessage
33 character(*),
intent(in):: date_str
41 integer,
intent(out):: year
42 integer,
intent(out):: month
43 integer,
intent(out):: day
44 integer,
intent(out):: hour
45 integer,
intent(out):: min
46 real(DP),
intent(out):: sec
47 character(*),
intent(out):: zone
49 logical,
intent(out),
optional:: err
68 integer:: start, length
69 character(STRING):: str1, str2
70 character(TOKEN):: zone_pm, zone_hrs, zone_min
72 character(STRING):: cause_c
73 character(*),
parameter:: subname =
'DCCalDateParseStr1' 75 call beginsub( subname )
82 call match(
'[-]*#d+-#d+-#d+[#w#s]+#d+:#d+:#d+', date_str, &
85 if ( length > 0 )
then 86 str1 = date_str(start:)
89 call messagenotify(
'W', subname, &
90 &
'date_str=<%c> is invalid expression as date.', &
91 & c1 = trim(date_str) )
98 call match(
'^[-]*#d+-', str1, &
100 str2 = str1(start:start+length-2)
101 str1 = str1(start+length:)
107 call match(
'^#d+-', str1, &
109 str2 = str1(start:start+length-2)
110 str1 = str1(start+length:)
116 call match(
'^#d+[#w#s]', str1, &
118 str2 = str1(start:start+length-2)
119 str1 = str1(start+length:)
125 call match(
'#d+:', str1, &
127 str2 = str1(start:start+length-2)
128 str1 = str1(start+length:)
134 call match(
'#d+:', str1, &
136 str2 = str1(start:start+length-2)
137 str1 = str1(start+length:)
143 call match(
'#d+', str1, &
145 str2 = str1(start:start+length-1)
146 str1 = str1(start+length:)
148 call match(
'^#.#d+', str1, &
151 if ( length > 0 )
then 152 str2 = trim(str2) // str1(start:start+length-1)
153 str1 = str1(start+length:)
160 call match(
'[#+-]#d+:#d+', str1, &
162 if ( length > 0 )
then 163 zone_pm = str1(start:start)
164 str1 = str1(start+1:start+length-1)
166 call match(
'^#d+:', str1, &
168 zone_hrs = str1(start:start+length-2)
169 zone_min = str1(start+length:)
170 zone = trim(zone_pm) // trim(zone_hrs) //
':' // trim(zone_min)
175 call dbgmessage(
'year=<%d> month=<%d> day=<%d> hour=<%d> min=<%d> sec=<%f>' // &
177 & i = (/year, month, day, hour, min/), d = (/sec/), &
184 call storeerror( stat, subname, err, cause_c )
185 call endsub( subname )
integer, parameter, public token
Character length for word, token.
integer, parameter, public dc_ebaddate
subroutine, public storeerror(number, where, err, cause_c, cause_i)
integer, parameter, public dc_noerr
Provide simple regular expression subroutine: 'match'.
subroutine dccaldateparsestr1(date_str, year, month, day, hour, min, sec, zone, err)
integer, parameter, public dp
Double Precision Real number.
subroutine, public match(pattern, text, start, length)
Provides kind type parameter values.
integer, parameter, public dc_ealreadyinit
integer, parameter, public string
Character length for string.