File tree Expand file tree Collapse file tree 2 files changed +90
-10
lines changed Expand file tree Collapse file tree 2 files changed +90
-10
lines changed Original file line number Diff line number Diff line change 384
384
"tz_hour" : 7 ,
385
385
"tz_minute" : 0
386
386
}
387
+ },
388
+ {
389
+ "header" : " Sun, 27 Oct 2002 23:57:07 EST" ,
390
+ "expected" : {
391
+ "year" : 2002 ,
392
+ "month" : 10 ,
393
+ "day" : 27 ,
394
+ "hour" : 23 ,
395
+ "minute" : 57 ,
396
+ "second" : 7 ,
397
+ "tz_before_gmt" : true ,
398
+ "tz_hour" : 5 ,
399
+ "tz_minute" : 0
400
+ }
401
+ },
402
+ {
403
+ "header" : " Thu, 10 Jul 1997 14:53:31 EST5EDT" ,
404
+ "expected" : {
405
+ "year" : 1997 ,
406
+ "month" : 7 ,
407
+ "day" : 10 ,
408
+ "hour" : 14 ,
409
+ "minute" : 53 ,
410
+ "second" : 31 ,
411
+ "tz_before_gmt" : true ,
412
+ "tz_hour" : 5 ,
413
+ "tz_minute" : 0
414
+ }
415
+ },
416
+ {
417
+ "header" : " Thu, 10 Jul 1997 14:53:31 A" ,
418
+ "expected" : {
419
+ "year" : 1997 ,
420
+ "month" : 7 ,
421
+ "day" : 10 ,
422
+ "hour" : 14 ,
423
+ "minute" : 53 ,
424
+ "second" : 31 ,
425
+ "tz_before_gmt" : false ,
426
+ "tz_hour" : 0 ,
427
+ "tz_minute" : 0
428
+ }
429
+ },
430
+ {
431
+ "header" : " Thu, 10 Jul 1997 14:53:31 ZZZZ" ,
432
+ "expected" : {
433
+ "year" : 1997 ,
434
+ "month" : 7 ,
435
+ "day" : 10 ,
436
+ "hour" : 14 ,
437
+ "minute" : 53 ,
438
+ "second" : 31 ,
439
+ "tz_before_gmt" : false ,
440
+ "tz_hour" : 0 ,
441
+ "tz_minute" : 0
442
+ }
387
443
}
388
444
]
Original file line number Diff line number Diff line change @@ -338,13 +338,9 @@ impl<'x> MessageStream<'x> {
338
338
parts_sizes[ pos] -= 1 ;
339
339
parts[ pos] += ( * ch - b'0' ) as u32 * u32:: pow ( 10 , parts_sizes[ pos] ) ;
340
340
341
- if ignore {
342
- ignore = false ;
343
- }
344
- }
345
- if is_new_token {
346
- is_new_token = false ;
341
+ ignore = false ;
347
342
}
343
+ is_new_token = false ;
348
344
}
349
345
b':' => {
350
346
if !is_new_token && !ignore && ( pos == 3 || pos == 4 ) {
@@ -372,9 +368,15 @@ impl<'x> MessageStream<'x> {
372
368
}
373
369
month_pos += 1 ;
374
370
}
375
- if is_new_token {
376
- is_new_token = false ;
371
+ if pos == 6 {
372
+ let mut buf = [ * ch, 0 , 0 ] ;
373
+ let zone = self . obs_zone ( & mut buf) ;
374
+ is_plus = !zone. is_negative ( ) ;
375
+ parts[ pos] = 100 * zone. unsigned_abs ( ) ;
376
+ parts_sizes[ pos] = 0 ;
377
+ next_part = true ;
377
378
}
379
+ is_new_token = false ;
378
380
}
379
381
b'(' => {
380
382
comment_count += 1 ;
@@ -433,14 +435,36 @@ impl<'x> MessageStream<'x> {
433
435
hour : parts[ 3 ] as u8 ,
434
436
minute : parts[ 4 ] as u8 ,
435
437
second : parts[ 5 ] as u8 ,
436
- tz_hour : ( parts[ 6 ] / 100 ) as u8 ,
437
- tz_minute : ( parts[ 6 ] % 100 ) as u8 ,
438
+ tz_hour : ( ( parts[ 6 ] / 100 ) % 12 ) as u8 ,
439
+ tz_minute : ( ( parts[ 6 ] % 100 ) % 60 ) as u8 ,
438
440
tz_before_gmt : !is_plus,
439
441
} )
440
442
} else {
441
443
HeaderValue :: Empty
442
444
}
443
445
}
446
+ // 4.3 obsolete date and time
447
+ fn obs_zone ( & mut self , buf : & mut [ u8 ; 3 ] ) -> i32 {
448
+ let mut i = 1 ;
449
+ for & b in self . by_ref ( ) {
450
+ buf[ i] = b;
451
+ i += 1 ;
452
+ if i == 3 {
453
+ break ;
454
+ }
455
+ }
456
+ match buf. as_ref ( ) {
457
+ b"EDT" => -4 ,
458
+ b"EST" => -5 ,
459
+ b"CDT" => -5 ,
460
+ b"CST" => -6 ,
461
+ b"MDT" => -6 ,
462
+ b"MST" => -7 ,
463
+ b"PDT" => -7 ,
464
+ b"PST" => -8 ,
465
+ _ => 0 ,
466
+ }
467
+ }
444
468
}
445
469
446
470
static MONTH_HASH : & [ u8 ] = & [
You can’t perform that action at this time.
0 commit comments