Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
177 changes: 14 additions & 163 deletions src/items/time.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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())),
}?;
Expand Down
Loading