From 01515af53148386182fde97470ac3ad968e83b55 Mon Sep 17 00:00:00 2001 From: Kartikaya Gupta Date: Sun, 2 Oct 2016 15:38:12 -0400 Subject: Add list of textual timezones from RFC 822 --- src/dateparse.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/dateparse.rs b/src/dateparse.rs index 59fb478..1ce6e65 100644 --- a/src/dateparse.rs +++ b/src/dateparse.rs @@ -146,7 +146,22 @@ pub fn dateparse(date: &str) -> Result { let (tz, tz_sign) = match tok.parse::() { Ok(v) if v < 0 => (-v, -1), Ok(v) => (v, 1), - Err(_) => return Err("Invalid timezone"), + Err(_) => { + match tok.to_uppercase().as_str() { + // This list taken from IETF RFC 822 + "UTC" | "UT" | "GMT" | "Z" => (0, 1), + "EDT" => (400, -1), + "EST" | "CDT" => (500, -1), + "CST" | "MDT" => (600, -1), + "MST" | "PDT" => (700, -1), + "PST" => (800, -1), + "A" => (100, -1), + "M" => (1200, -1), + "N" => (100, 1), + "Y" => (1200, 1), + _ => return Err("Invalid timezone"), + } + } }; let tz_hours = tz / 100; let tz_mins = tz % 100; @@ -175,5 +190,6 @@ mod tests { assert_eq!(dateparse("Fri, 31 Dec 2399 00:00:00 +0000").unwrap(), 13569379200); assert_eq!(dateparse("Fri, 31 Dec 2400 00:00:00 +0000").unwrap(), 13601001600); assert_eq!(dateparse("17 Sep 2016 16:05:38 -1000").unwrap(), 1474164338); + assert_eq!(dateparse("Fri, 30 Nov 2012 20:57:23 GMT").unwrap(), 1354309043); } } -- cgit v1.2.3