fix: remove unsupported named time zones

This commit is contained in:
yuankunzhang
2025-08-04 19:53:13 +08:00
parent 46a5ef89c9
commit fa90303836
+14 -163
View File
@@ -331,237 +331,88 @@ fn timezone_name_offset(input: &mut &str) -> ModalResult<Offset> {
Ok(tz)
}
/// Timezone list extracted from:
/// https://www.timeanddate.com/time/zones/
/// Named timezone list.
///
/// The full list of timezones can be extracted from
/// https://www.timeanddate.com/time/zones/. GNU date only supports a subset of
/// these. We support the same subset as GNU date.
///
/// From the GNU date manual:
///
/// > Time zone items other than UTC and Z are obsolescent and are not
/// > recommended, because they are ambiguous; for example, EST has a
/// > different meaning in Australia than in the United States, and A has
/// > different meaning as a military time zone than as an obsolete RFC 822
/// > time zone. Instead, it's better to use unambiguous numeric time zone
/// > corrections like -0500.
fn tzname_to_offset(input: &str) -> ModalResult<Offset> {
let mut offset_str = match input {
"z" => Ok("+0"),
"yekt" => Ok("+5"),
"yekst" => Ok("+6"),
"yapt" => Ok("+10"),
"yakt" => Ok("+9"),
"yakst" => Ok("+10"),
"y" => Ok("-12"),
"x" => Ok("-11"),
"wt" => Ok("+0"),
"wst" => Ok("+13"),
"wita" => Ok("+8"),
"wit" => Ok("+9"),
"wib" => Ok("+7"),
"wgt" => Ok("-2"),
"wgst" => Ok("-1"),
"wft" => Ok("+12"),
"wet" => Ok("+0"),
"west" => Ok("+1"),
"wat" => Ok("+1"),
"wast" => Ok("+2"),
"warst" => Ok("-3"),
"wakt" => Ok("+12"),
"w" => Ok("-10"),
"vut" => Ok("+11"),
"vost" => Ok("+6"),
"vlat" => Ok("+10"),
"vlast" => Ok("+11"),
"vet" => Ok("-4"),
"v" => Ok("-9"),
"uzt" => Ok("+5"),
"uyt" => Ok("-3"),
"uyst" => Ok("-2"),
"utc" => Ok("+0"),
"ulat" => Ok("+8"),
"ulast" => Ok("+9"),
"u" => Ok("-8"),
"tvt" => Ok("+12"),
"trt" => Ok("+3"),
"tot" => Ok("+13"),
"tost" => Ok("+14"),
"tmt" => Ok("+5"),
"tlt" => Ok("+9"),
"tkt" => Ok("+13"),
"tjt" => Ok("+5"),
"tft" => Ok("+5"),
"taht" => Ok("-10"),
"t" => Ok("-7"),
"syot" => Ok("+3"),
"sst" => Ok("-11"),
"srt" => Ok("-3"),
"sret" => Ok("+11"),
"sgt" => Ok("+8"),
"sct" => Ok("+4"),
"sbt" => Ok("+11"),
"sast" => Ok("+2"),
"samt" => Ok("+4"),
"sakt" => Ok("+11"),
"s" => Ok("-6"),
"rott" => Ok("-3"),
"ret" => Ok("+4"),
"r" => Ok("-5"),
"qyzt" => Ok("+6"),
"q" => Ok("-4"),
"pyt" => Ok("-4"),
"pyst" => Ok("-3"),
"pwt" => Ok("+9"),
"pt" => Ok("-7"),
"pst" => Ok("-8"),
"pont" => Ok("+11"),
"pmst" => Ok("-3"),
"pmdt" => Ok("-2"),
"pkt" => Ok("+5"),
"pht" => Ok("+8"),
"phot" => Ok("+13"),
"pgt" => Ok("+10"),
"pett" => Ok("+12"),
"petst" => Ok("+12"),
"pet" => Ok("-5"),
"pdt" => Ok("-7"),
"p" => Ok("-3"),
"orat" => Ok("+5"),
"omst" => Ok("+6"),
"omsst" => Ok("+7"),
"o" => Ok("-2"),
"nzst" => Ok("+12"),
"nzdt" => Ok("+13"),
"nut" => Ok("-11"),
"nst" => Ok("-3:30"),
"nrt" => Ok("+12"),
"npt" => Ok("+5:45"),
"novt" => Ok("+7"),
"novst" => Ok("+7"),
"nft" => Ok("+11"),
"nfdt" => Ok("+12"),
"ndt" => Ok("-2:30"),
"nct" => Ok("+11"),
"n" => Ok("-1"),
"myt" => Ok("+8"),
"mvt" => Ok("+5"),
"mut" => Ok("+4"),
"mt" => Ok("-6"),
"mst" => Ok("-7"),
"msk" => Ok("+3"),
"msd" => Ok("+4"),
"mmt" => Ok("+6:30"),
"mht" => Ok("+12"),
"mdt" => Ok("-6"),
"mawt" => Ok("+5"),
"mart" => Ok("-9:30"),
"magt" => Ok("+11"),
"magst" => Ok("+12"),
"m" => Ok("+12"),
"lint" => Ok("+14"),
"lhst" => Ok("+10:30"),
"lhdt" => Ok("+11"),
"l" => Ok("+11"),
"kuyt" => Ok("+4"),
"kst" => Ok("+9"),
"krat" => Ok("+7"),
"krast" => Ok("+8"),
"kost" => Ok("+11"),
"kgt" => Ok("+6"),
"k" => Ok("+10"),
"jst" => Ok("+9"),
"ist" => Ok("+5:30"),
"irst" => Ok("+3:30"),
"irkt" => Ok("+8"),
"irkst" => Ok("+9"),
"irdt" => Ok("+4:30"),
"iot" => Ok("+6"),
"idt" => Ok("+3"),
"ict" => Ok("+7"),
"i" => Ok("+9"),
"hst" => Ok("-10"),
"hovt" => Ok("+7"),
"hovst" => Ok("+8"),
"hkt" => Ok("+8"),
"hdt" => Ok("-9"),
"h" => Ok("+8"),
"gyt" => Ok("-4"),
"gst" => Ok("+4"),
"gmt" => Ok("+0"),
"gilt" => Ok("+12"),
"gft" => Ok("-3"),
"get" => Ok("+4"),
"gamt" => Ok("-9"),
"galt" => Ok("-6"),
"g" => Ok("+7"),
"fnt" => Ok("-2"),
"fkt" => Ok("-4"),
"fkst" => Ok("-3"),
"fjt" => Ok("+12"),
"fjst" => Ok("+13"),
"fet" => Ok("+3"),
"f" => Ok("+6"),
"et" => Ok("-4"),
"est" => Ok("-5"),
"egt" => Ok("-1"),
"egst" => Ok("+0"),
"eet" => Ok("+2"),
"eest" => Ok("+3"),
"edt" => Ok("-4"),
"ect" => Ok("-5"),
"eat" => Ok("+3"),
"east" => Ok("-6"),
"easst" => Ok("-5"),
"e" => Ok("+5"),
"ddut" => Ok("+10"),
"davt" => Ok("+7"),
"d" => Ok("+4"),
"chst" => Ok("+10"),
"cxt" => Ok("+7"),
"cvt" => Ok("-1"),
"ct" => Ok("-5"),
"cst" => Ok("-6"),
"cot" => Ok("-5"),
"clt" => Ok("-4"),
"clst" => Ok("-3"),
"ckt" => Ok("-10"),
"cist" => Ok("-5"),
"cidst" => Ok("-4"),
"chut" => Ok("+10"),
"chot" => Ok("+8"),
"chost" => Ok("+9"),
"chast" => Ok("+12:45"),
"chadt" => Ok("+13:45"),
"cet" => Ok("+1"),
"cest" => Ok("+2"),
"cdt" => Ok("-5"),
"cct" => Ok("+6:30"),
"cat" => Ok("+2"),
"cast" => Ok("+8"),
"c" => Ok("+3"),
"btt" => Ok("+6"),
"bst" => Ok("+6"),
"brt" => Ok("-3"),
"brst" => Ok("-2"),
"bot" => Ok("-4"),
"bnt" => Ok("+8"),
"b" => Ok("+2"),
"aoe" => Ok("-12"),
"azt" => Ok("+4"),
"azst" => Ok("+5"),
"azot" => Ok("-1"),
"azost" => Ok("+0"),
"awst" => Ok("+8"),
"awdt" => Ok("+9"),
"at" => Ok("-4:00"),
"ast" => Ok("-3"),
"art" => Ok("-3"),
"aqtt" => Ok("+5"),
"anat" => Ok("+12"),
"anast" => Ok("+12"),
"amt" => Ok("-4"),
"amst" => Ok("-3"),
"almt" => Ok("+6"),
"akst" => Ok("-9"),
"akdt" => Ok("-8"),
"aft" => Ok("+4:30"),
"aet" => Ok("+11"),
"aest" => Ok("+10"),
"aedt" => Ok("+11"),
"adt" => Ok("+4"),
"acwst" => Ok("+8:45"),
"act" => Ok("-5"),
"acst" => Ok("+9:30"),
"acdt" => Ok("+10:30"),
"a" => Ok("+1"),
_ => Err(ErrMode::Backtrack(ContextError::new())),
}?;