220{
221
222
223
224
225
226
227
228
229
230
231 int nYear, nMonth, nDay, nHour, nMin, nSec, nFSec;
232 nYear = nMonth = nDay = nHour = nMin = nSec = nFSec = 0;
233
234 const char* p = _s->dt_dec.dec_dgts;
235 int ndgts = _s->dt_dec.dec_ndgts;
236 switch (TU_START(_s->dt_qual)) {
237 case TU_YEAR: {
238 if (_s->dt_dec.dec_exp >= 7) {
239 nYear = (*p++) * 100;
240 if (--ndgts == 0)
241 break;
242 }
243 if (_s->dt_dec.dec_exp >= 6) {
244 nYear += (*p++);
245 if (--ndgts == 0)
246 break;
247 }
248 }
249 case TU_MONTH: {
250 if (_s->dt_dec.dec_exp >= 5) {
251 nMonth = *p++;
252 if (--ndgts == 0)
253 break;
254 }
255 }
256 case TU_DAY: {
257 if (_s->dt_dec.dec_exp >= 4) {
258 nDay = *p++;
259 if (--ndgts == 0)
260 break;
261 }
262 }
263 case TU_HOUR: {
264 if (_s->dt_dec.dec_exp >= 3) {
265 nHour = *p++;
266 if (--ndgts == 0)
267 break;
268 }
269 }
270 case TU_MINUTE: {
271 if (_s->dt_dec.dec_exp >= 2) {
272 nMin = *p++;
273 if (--ndgts == 0)
274 break;
275 }
276 }
277 case TU_SECOND: {
278 if (_s->dt_dec.dec_exp >= 1) {
279 nSec = *p++;
280 if (--ndgts == 0)
281 break;
282 }
283 }
284 case TU_FRAC: {
285
286 if (_s->dt_dec.dec_exp >= 0) {
287 nFSec = *p++ * 10000;
288 if (--ndgts == 0)
289 break;
290 }
291
292 if (_s->dt_dec.dec_exp >= -1) {
293 nFSec += *p * 100;
294 if (--ndgts == 0)
295 break;
296 }
297
298 if (_s->dt_dec.dec_exp >= -2)
299 nFSec += *p;
300 }
301 }
302
309 _r->
frac = nFSec * 1000;
311}