@@ -331,237 +331,88 @@ fn timezone_name_offset(input: &mut &str) -> ModalResult<Offset> {
331331 Ok ( tz)
332332}
333333
334- /// Timezone list extracted from:
335- /// https://www.timeanddate.com/time/zones/
334+ /// Named timezone list.
335+ ///
336+ /// The full list of timezones can be extracted from
337+ /// https://www.timeanddate.com/time/zones/. GNU date only supports a subset of
338+ /// these. We support the same subset as GNU date.
339+ ///
340+ /// From the GNU date manual:
341+ ///
342+ /// > Time zone items other than ‘UTC’ and ‘Z’ are obsolescent and are not
343+ /// > recommended, because they are ambiguous; for example, ‘EST’ has a
344+ /// > different meaning in Australia than in the United States, and ‘A’ has
345+ /// > different meaning as a military time zone than as an obsolete RFC 822
346+ /// > time zone. Instead, it's better to use unambiguous numeric time zone
347+ /// > corrections like ‘-0500’.
336348fn tzname_to_offset ( input : & str ) -> ModalResult < Offset > {
337349 let mut offset_str = match input {
338350 "z" => Ok ( "+0" ) ,
339- "yekt" => Ok ( "+5" ) ,
340- "yekst" => Ok ( "+6" ) ,
341- "yapt" => Ok ( "+10" ) ,
342- "yakt" => Ok ( "+9" ) ,
343- "yakst" => Ok ( "+10" ) ,
344351 "y" => Ok ( "-12" ) ,
345352 "x" => Ok ( "-11" ) ,
346- "wt" => Ok ( "+0" ) ,
347- "wst" => Ok ( "+13" ) ,
348- "wita" => Ok ( "+8" ) ,
349- "wit" => Ok ( "+9" ) ,
350- "wib" => Ok ( "+7" ) ,
351- "wgt" => Ok ( "-2" ) ,
352- "wgst" => Ok ( "-1" ) ,
353- "wft" => Ok ( "+12" ) ,
354353 "wet" => Ok ( "+0" ) ,
355354 "west" => Ok ( "+1" ) ,
356355 "wat" => Ok ( "+1" ) ,
357- "wast" => Ok ( "+2" ) ,
358- "warst" => Ok ( "-3" ) ,
359- "wakt" => Ok ( "+12" ) ,
360356 "w" => Ok ( "-10" ) ,
361- "vut" => Ok ( "+11" ) ,
362- "vost" => Ok ( "+6" ) ,
363- "vlat" => Ok ( "+10" ) ,
364- "vlast" => Ok ( "+11" ) ,
365- "vet" => Ok ( "-4" ) ,
366357 "v" => Ok ( "-9" ) ,
367- "uzt" => Ok ( "+5" ) ,
368- "uyt" => Ok ( "-3" ) ,
369- "uyst" => Ok ( "-2" ) ,
370358 "utc" => Ok ( "+0" ) ,
371- "ulat" => Ok ( "+8" ) ,
372- "ulast" => Ok ( "+9" ) ,
373359 "u" => Ok ( "-8" ) ,
374- "tvt" => Ok ( "+12" ) ,
375- "trt" => Ok ( "+3" ) ,
376- "tot" => Ok ( "+13" ) ,
377- "tost" => Ok ( "+14" ) ,
378- "tmt" => Ok ( "+5" ) ,
379- "tlt" => Ok ( "+9" ) ,
380- "tkt" => Ok ( "+13" ) ,
381- "tjt" => Ok ( "+5" ) ,
382- "tft" => Ok ( "+5" ) ,
383- "taht" => Ok ( "-10" ) ,
384360 "t" => Ok ( "-7" ) ,
385- "syot" => Ok ( "+3" ) ,
386361 "sst" => Ok ( "-11" ) ,
387- "srt" => Ok ( "-3" ) ,
388- "sret" => Ok ( "+11" ) ,
389362 "sgt" => Ok ( "+8" ) ,
390- "sct" => Ok ( "+4" ) ,
391- "sbt" => Ok ( "+11" ) ,
392363 "sast" => Ok ( "+2" ) ,
393- "samt" => Ok ( "+4" ) ,
394- "sakt" => Ok ( "+11" ) ,
395364 "s" => Ok ( "-6" ) ,
396- "rott" => Ok ( "-3" ) ,
397- "ret" => Ok ( "+4" ) ,
398365 "r" => Ok ( "-5" ) ,
399- "qyzt" => Ok ( "+6" ) ,
400366 "q" => Ok ( "-4" ) ,
401- "pyt" => Ok ( "-4" ) ,
402- "pyst" => Ok ( "-3" ) ,
403- "pwt" => Ok ( "+9" ) ,
404- "pt" => Ok ( "-7" ) ,
405367 "pst" => Ok ( "-8" ) ,
406- "pont" => Ok ( "+11" ) ,
407- "pmst" => Ok ( "-3" ) ,
408- "pmdt" => Ok ( "-2" ) ,
409- "pkt" => Ok ( "+5" ) ,
410- "pht" => Ok ( "+8" ) ,
411- "phot" => Ok ( "+13" ) ,
412- "pgt" => Ok ( "+10" ) ,
413- "pett" => Ok ( "+12" ) ,
414- "petst" => Ok ( "+12" ) ,
415- "pet" => Ok ( "-5" ) ,
416368 "pdt" => Ok ( "-7" ) ,
417369 "p" => Ok ( "-3" ) ,
418- "orat" => Ok ( "+5" ) ,
419- "omst" => Ok ( "+6" ) ,
420- "omsst" => Ok ( "+7" ) ,
421370 "o" => Ok ( "-2" ) ,
422371 "nzst" => Ok ( "+12" ) ,
423372 "nzdt" => Ok ( "+13" ) ,
424- "nut" => Ok ( "-11" ) ,
425373 "nst" => Ok ( "-3:30" ) ,
426- "nrt" => Ok ( "+12" ) ,
427- "npt" => Ok ( "+5:45" ) ,
428- "novt" => Ok ( "+7" ) ,
429- "novst" => Ok ( "+7" ) ,
430- "nft" => Ok ( "+11" ) ,
431- "nfdt" => Ok ( "+12" ) ,
432374 "ndt" => Ok ( "-2:30" ) ,
433- "nct" => Ok ( "+11" ) ,
434375 "n" => Ok ( "-1" ) ,
435- "myt" => Ok ( "+8" ) ,
436- "mvt" => Ok ( "+5" ) ,
437- "mut" => Ok ( "+4" ) ,
438- "mt" => Ok ( "-6" ) ,
439376 "mst" => Ok ( "-7" ) ,
440377 "msk" => Ok ( "+3" ) ,
441378 "msd" => Ok ( "+4" ) ,
442- "mmt" => Ok ( "+6:30" ) ,
443- "mht" => Ok ( "+12" ) ,
444379 "mdt" => Ok ( "-6" ) ,
445- "mawt" => Ok ( "+5" ) ,
446- "mart" => Ok ( "-9:30" ) ,
447- "magt" => Ok ( "+11" ) ,
448- "magst" => Ok ( "+12" ) ,
449380 "m" => Ok ( "+12" ) ,
450- "lint" => Ok ( "+14" ) ,
451- "lhst" => Ok ( "+10:30" ) ,
452- "lhdt" => Ok ( "+11" ) ,
453381 "l" => Ok ( "+11" ) ,
454- "kuyt" => Ok ( "+4" ) ,
455- "kst" => Ok ( "+9" ) ,
456- "krat" => Ok ( "+7" ) ,
457- "krast" => Ok ( "+8" ) ,
458- "kost" => Ok ( "+11" ) ,
459- "kgt" => Ok ( "+6" ) ,
460382 "k" => Ok ( "+10" ) ,
461383 "jst" => Ok ( "+9" ) ,
462384 "ist" => Ok ( "+5:30" ) ,
463- "irst" => Ok ( "+3:30" ) ,
464- "irkt" => Ok ( "+8" ) ,
465- "irkst" => Ok ( "+9" ) ,
466- "irdt" => Ok ( "+4:30" ) ,
467- "iot" => Ok ( "+6" ) ,
468- "idt" => Ok ( "+3" ) ,
469- "ict" => Ok ( "+7" ) ,
470385 "i" => Ok ( "+9" ) ,
471386 "hst" => Ok ( "-10" ) ,
472- "hovt" => Ok ( "+7" ) ,
473- "hovst" => Ok ( "+8" ) ,
474- "hkt" => Ok ( "+8" ) ,
475- "hdt" => Ok ( "-9" ) ,
476387 "h" => Ok ( "+8" ) ,
477- "gyt" => Ok ( "-4" ) ,
478388 "gst" => Ok ( "+4" ) ,
479389 "gmt" => Ok ( "+0" ) ,
480- "gilt" => Ok ( "+12" ) ,
481- "gft" => Ok ( "-3" ) ,
482- "get" => Ok ( "+4" ) ,
483- "gamt" => Ok ( "-9" ) ,
484- "galt" => Ok ( "-6" ) ,
485390 "g" => Ok ( "+7" ) ,
486- "fnt" => Ok ( "-2" ) ,
487- "fkt" => Ok ( "-4" ) ,
488- "fkst" => Ok ( "-3" ) ,
489- "fjt" => Ok ( "+12" ) ,
490- "fjst" => Ok ( "+13" ) ,
491- "fet" => Ok ( "+3" ) ,
492391 "f" => Ok ( "+6" ) ,
493- "et" => Ok ( "-4" ) ,
494392 "est" => Ok ( "-5" ) ,
495- "egt" => Ok ( "-1" ) ,
496- "egst" => Ok ( "+0" ) ,
497393 "eet" => Ok ( "+2" ) ,
498394 "eest" => Ok ( "+3" ) ,
499395 "edt" => Ok ( "-4" ) ,
500- "ect" => Ok ( "-5" ) ,
501396 "eat" => Ok ( "+3" ) ,
502- "east" => Ok ( "-6" ) ,
503- "easst" => Ok ( "-5" ) ,
504397 "e" => Ok ( "+5" ) ,
505- "ddut" => Ok ( "+10" ) ,
506- "davt" => Ok ( "+7" ) ,
507398 "d" => Ok ( "+4" ) ,
508- "chst" => Ok ( "+10" ) ,
509- "cxt" => Ok ( "+7" ) ,
510- "cvt" => Ok ( "-1" ) ,
511- "ct" => Ok ( "-5" ) ,
512399 "cst" => Ok ( "-6" ) ,
513- "cot" => Ok ( "-5" ) ,
514400 "clt" => Ok ( "-4" ) ,
515401 "clst" => Ok ( "-3" ) ,
516- "ckt" => Ok ( "-10" ) ,
517- "cist" => Ok ( "-5" ) ,
518- "cidst" => Ok ( "-4" ) ,
519- "chut" => Ok ( "+10" ) ,
520- "chot" => Ok ( "+8" ) ,
521- "chost" => Ok ( "+9" ) ,
522- "chast" => Ok ( "+12:45" ) ,
523- "chadt" => Ok ( "+13:45" ) ,
524402 "cet" => Ok ( "+1" ) ,
525403 "cest" => Ok ( "+2" ) ,
526404 "cdt" => Ok ( "-5" ) ,
527- "cct" => Ok ( "+6:30" ) ,
528405 "cat" => Ok ( "+2" ) ,
529- "cast" => Ok ( "+8" ) ,
530406 "c" => Ok ( "+3" ) ,
531- "btt" => Ok ( "+6" ) ,
532407 "bst" => Ok ( "+6" ) ,
533408 "brt" => Ok ( "-3" ) ,
534409 "brst" => Ok ( "-2" ) ,
535- "bot" => Ok ( "-4" ) ,
536- "bnt" => Ok ( "+8" ) ,
537410 "b" => Ok ( "+2" ) ,
538- "aoe" => Ok ( "-12" ) ,
539- "azt" => Ok ( "+4" ) ,
540- "azst" => Ok ( "+5" ) ,
541- "azot" => Ok ( "-1" ) ,
542- "azost" => Ok ( "+0" ) ,
543- "awst" => Ok ( "+8" ) ,
544- "awdt" => Ok ( "+9" ) ,
545- "at" => Ok ( "-4:00" ) ,
546411 "ast" => Ok ( "-3" ) ,
547412 "art" => Ok ( "-3" ) ,
548- "aqtt" => Ok ( "+5" ) ,
549- "anat" => Ok ( "+12" ) ,
550- "anast" => Ok ( "+12" ) ,
551- "amt" => Ok ( "-4" ) ,
552- "amst" => Ok ( "-3" ) ,
553- "almt" => Ok ( "+6" ) ,
554413 "akst" => Ok ( "-9" ) ,
555414 "akdt" => Ok ( "-8" ) ,
556- "aft" => Ok ( "+4:30" ) ,
557- "aet" => Ok ( "+11" ) ,
558- "aest" => Ok ( "+10" ) ,
559- "aedt" => Ok ( "+11" ) ,
560415 "adt" => Ok ( "+4" ) ,
561- "acwst" => Ok ( "+8:45" ) ,
562- "act" => Ok ( "-5" ) ,
563- "acst" => Ok ( "+9:30" ) ,
564- "acdt" => Ok ( "+10:30" ) ,
565416 "a" => Ok ( "+1" ) ,
566417 _ => Err ( ErrMode :: Backtrack ( ContextError :: new ( ) ) ) ,
567418 } ?;
0 commit comments