67 & year, month, day, hour, min, sec, zone, &
77 character(*),
intent(in):: date_str
78 integer,
intent(out):: year
79 integer,
intent(out):: month
80 integer,
intent(out):: day
81 integer,
intent(out):: hour
82 integer,
intent(out):: min
83 real(DP),
intent(out):: sec
84 character(*),
intent(out):: zone
85 logical,
intent(out),
optional:: err
90 integer:: start, length
91 character(STRING):: str1, str2
92 character(TOKEN):: zone_pm, zone_hrs, zone_min
94 character(STRING):: cause_c
95 character(*),
parameter:: subname =
'DCCalDateParseStr1'
104 call match(
'[-]*#d+-#d+-#d+[#w#s]+#d+:#d+:#d+', date_str, &
107 if ( length > 0 )
then
108 str1 = date_str(start:)
112 &
'date_str=<%c> is invalid expression as date.', &
113 & c1 = trim(date_str) )
120 call match(
'^[-]*#d+-', str1, &
122 str2 = str1(start:start+length-2)
123 str1 = str1(start+length:)
129 call match(
'^#d+-', str1, &
131 str2 = str1(start:start+length-2)
132 str1 = str1(start+length:)
138 call match(
'^#d+[#w#s]', str1, &
140 str2 = str1(start:start+length-2)
141 str1 = str1(start+length:)
147 call match(
'#d+:', str1, &
149 str2 = str1(start:start+length-2)
150 str1 = str1(start+length:)
156 call match(
'#d+:', str1, &
158 str2 = str1(start:start+length-2)
159 str1 = str1(start+length:)
165 call match(
'#d+', str1, &
167 str2 = str1(start:start+length-1)
168 str1 = str1(start+length:)
170 call match(
'^#.#d+', str1, &
173 if ( length > 0 )
then
174 str2 = trim(str2) // str1(start:start+length-1)
175 str1 = str1(start+length:)
182 call match(
'[#+-]#d+:#d+', str1, &
184 if ( length > 0 )
then
185 zone_pm = str1(start:start)
186 str1 = str1(start+1:start+length-1)
188 call match(
'^#d+:', str1, &
190 zone_hrs = str1(start:start+length-2)
191 zone_min = str1(start+length:)
192 zone = trim(zone_pm) // trim(zone_hrs) //
':' // trim(zone_min)
197 call dbgmessage(
'year=<%d> month=<%d> day=<%d> hour=<%d> min=<%d> sec=<%f>' // &
199 & i = (/year, month, day, hour, min/), d = (/sec/), &
206 call storeerror( stat, subname, err, cause_c )
subroutine dccaldateparsestr1(date_str, year, month, day, hour, min, sec, zone, err)
日時の文字列の解釈
subroutine, public storeerror(number, where, err, cause_c, cause_i)
integer, parameter, public dc_noerr
エラー等を保持
integer, parameter, public dc_ebaddate
シンプルな正規表現関数 'match' を提供します.
subroutine, public match(pattern, text, start, length)
subroutine, public dbgmessage(fmt, i, r, d, l, n, c1, c2, c3, ca)
subroutine, public beginsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca, version)
subroutine, public endsub(name, fmt, i, r, d, l, n, c1, c2, c3, ca)
integer, parameter, public token
単語やキーワードを保持する文字型変数の種別型パラメタ
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ
integer, parameter, public dp
倍精度実数型変数