diff options
Diffstat (limited to 'vendor/time/src/display.rs')
-rw-r--r-- | vendor/time/src/display.rs | 260 |
1 files changed, 0 insertions, 260 deletions
diff --git a/vendor/time/src/display.rs b/vendor/time/src/display.rs deleted file mode 100644 index 705b43078..000000000 --- a/vendor/time/src/display.rs +++ /dev/null @@ -1,260 +0,0 @@ -use std::fmt::{self, Write}; - -use super::{TmFmt, Tm, Fmt}; - -impl<'a> fmt::Display for TmFmt<'a> { - fn fmt(&self, fmt: &mut fmt::Formatter) -> fmt::Result { - match self.format { - Fmt::Str(ref s) => { - let mut chars = s.chars(); - while let Some(ch) = chars.next() { - if ch == '%' { - // we've already validated that % always precedes - // another char - parse_type(fmt, chars.next().unwrap(), self.tm)?; - } else { - fmt.write_char(ch)?; - } - } - - Ok(()) - } - Fmt::Ctime => self.tm.to_local().asctime().fmt(fmt), - Fmt::Rfc3339 => { - if self.tm.tm_utcoff == 0 { - TmFmt { - tm: self.tm, - format: Fmt::Str("%Y-%m-%dT%H:%M:%SZ"), - }.fmt(fmt) - } else { - let s = TmFmt { - tm: self.tm, - format: Fmt::Str("%Y-%m-%dT%H:%M:%S"), - }; - let sign = if self.tm.tm_utcoff > 0 { '+' } else { '-' }; - let mut m = abs(self.tm.tm_utcoff) / 60; - let h = m / 60; - m -= h * 60; - write!(fmt, "{}{}{:02}:{:02}", s, sign, h, m) - } - } - } - } -} - -fn is_leap_year(year: i32) -> bool { - (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)) -} - -fn days_in_year(year: i32) -> i32 { - if is_leap_year(year) { 366 } - else { 365 } -} - -fn iso_week_days(yday: i32, wday: i32) -> i32 { - /* The number of days from the first day of the first ISO week of this - * year to the year day YDAY with week day WDAY. - * ISO weeks start on Monday. The first ISO week has the year's first - * Thursday. - * YDAY may be as small as yday_minimum. - */ - let iso_week_start_wday: i32 = 1; /* Monday */ - let iso_week1_wday: i32 = 4; /* Thursday */ - let yday_minimum: i32 = 366; - /* Add enough to the first operand of % to make it nonnegative. */ - let big_enough_multiple_of_7: i32 = (yday_minimum / 7 + 2) * 7; - - yday - (yday - wday + iso_week1_wday + big_enough_multiple_of_7) % 7 - + iso_week1_wday - iso_week_start_wday -} - -fn iso_week(fmt: &mut fmt::Formatter, ch:char, tm: &Tm) -> fmt::Result { - let mut year = tm.tm_year + 1900; - let mut days = iso_week_days(tm.tm_yday, tm.tm_wday); - - if days < 0 { - /* This ISO week belongs to the previous year. */ - year -= 1; - days = iso_week_days(tm.tm_yday + (days_in_year(year)), tm.tm_wday); - } else { - let d = iso_week_days(tm.tm_yday - (days_in_year(year)), - tm.tm_wday); - if 0 <= d { - /* This ISO week belongs to the next year. */ - year += 1; - days = d; - } - } - - match ch { - 'G' => write!(fmt, "{}", year), - 'g' => write!(fmt, "{:02}", (year % 100 + 100) % 100), - 'V' => write!(fmt, "{:02}", days / 7 + 1), - _ => Ok(()) - } -} - -fn parse_type(fmt: &mut fmt::Formatter, ch: char, tm: &Tm) -> fmt::Result { - match ch { - 'A' => fmt.write_str(match tm.tm_wday { - 0 => "Sunday", - 1 => "Monday", - 2 => "Tuesday", - 3 => "Wednesday", - 4 => "Thursday", - 5 => "Friday", - 6 => "Saturday", - _ => unreachable!(), - }), - 'a' => fmt.write_str(match tm.tm_wday { - 0 => "Sun", - 1 => "Mon", - 2 => "Tue", - 3 => "Wed", - 4 => "Thu", - 5 => "Fri", - 6 => "Sat", - _ => unreachable!(), - }), - 'B' => fmt.write_str(match tm.tm_mon { - 0 => "January", - 1 => "February", - 2 => "March", - 3 => "April", - 4 => "May", - 5 => "June", - 6 => "July", - 7 => "August", - 8 => "September", - 9 => "October", - 10 => "November", - 11 => "December", - _ => unreachable!(), - }), - 'b' | 'h' => fmt.write_str(match tm.tm_mon { - 0 => "Jan", - 1 => "Feb", - 2 => "Mar", - 3 => "Apr", - 4 => "May", - 5 => "Jun", - 6 => "Jul", - 7 => "Aug", - 8 => "Sep", - 9 => "Oct", - 10 => "Nov", - 11 => "Dec", - _ => unreachable!(), - }), - 'C' => write!(fmt, "{:02}", (tm.tm_year + 1900) / 100), - 'c' => { - parse_type(fmt, 'a', tm)?; - fmt.write_str(" ")?; - parse_type(fmt, 'b', tm)?; - fmt.write_str(" ")?; - parse_type(fmt, 'e', tm)?; - fmt.write_str(" ")?; - parse_type(fmt, 'T', tm)?; - fmt.write_str(" ")?; - parse_type(fmt, 'Y', tm) - } - 'D' | 'x' => { - parse_type(fmt, 'm', tm)?; - fmt.write_str("/")?; - parse_type(fmt, 'd', tm)?; - fmt.write_str("/")?; - parse_type(fmt, 'y', tm) - } - 'd' => write!(fmt, "{:02}", tm.tm_mday), - 'e' => write!(fmt, "{:2}", tm.tm_mday), - 'f' => write!(fmt, "{:09}", tm.tm_nsec), - 'F' => { - parse_type(fmt, 'Y', tm)?; - fmt.write_str("-")?; - parse_type(fmt, 'm', tm)?; - fmt.write_str("-")?; - parse_type(fmt, 'd', tm) - } - 'G' => iso_week(fmt, 'G', tm), - 'g' => iso_week(fmt, 'g', tm), - 'H' => write!(fmt, "{:02}", tm.tm_hour), - 'I' => { - let mut h = tm.tm_hour; - if h == 0 { h = 12 } - if h > 12 { h -= 12 } - write!(fmt, "{:02}", h) - } - 'j' => write!(fmt, "{:03}", tm.tm_yday + 1), - 'k' => write!(fmt, "{:2}", tm.tm_hour), - 'l' => { - let mut h = tm.tm_hour; - if h == 0 { h = 12 } - if h > 12 { h -= 12 } - write!(fmt, "{:2}", h) - } - 'M' => write!(fmt, "{:02}", tm.tm_min), - 'm' => write!(fmt, "{:02}", tm.tm_mon + 1), - 'n' => fmt.write_str("\n"), - 'P' => fmt.write_str(if tm.tm_hour < 12 { "am" } else { "pm" }), - 'p' => fmt.write_str(if (tm.tm_hour) < 12 { "AM" } else { "PM" }), - 'R' => { - parse_type(fmt, 'H', tm)?; - fmt.write_str(":")?; - parse_type(fmt, 'M', tm) - } - 'r' => { - parse_type(fmt, 'I', tm)?; - fmt.write_str(":")?; - parse_type(fmt, 'M', tm)?; - fmt.write_str(":")?; - parse_type(fmt, 'S', tm)?; - fmt.write_str(" ")?; - parse_type(fmt, 'p', tm) - } - 'S' => write!(fmt, "{:02}", tm.tm_sec), - 's' => write!(fmt, "{}", tm.to_timespec().sec), - 'T' | 'X' => { - parse_type(fmt, 'H', tm)?; - fmt.write_str(":")?; - parse_type(fmt, 'M', tm)?; - fmt.write_str(":")?; - parse_type(fmt, 'S', tm) - } - 't' => fmt.write_str("\t"), - 'U' => write!(fmt, "{:02}", (tm.tm_yday - tm.tm_wday + 7) / 7), - 'u' => { - let i = tm.tm_wday; - write!(fmt, "{}", (if i == 0 { 7 } else { i })) - } - 'V' => iso_week(fmt, 'V', tm), - 'v' => { - parse_type(fmt, 'e', tm)?; - fmt.write_str("-")?; - parse_type(fmt, 'b', tm)?; - fmt.write_str("-")?; - parse_type(fmt, 'Y', tm) - } - 'W' => { - write!(fmt, "{:02}", (tm.tm_yday - (tm.tm_wday - 1 + 7) % 7 + 7) / 7) - } - 'w' => write!(fmt, "{}", tm.tm_wday), - 'Y' => write!(fmt, "{}", tm.tm_year + 1900), - 'y' => write!(fmt, "{:02}", (tm.tm_year + 1900) % 100), - // FIXME (#2350): support locale - 'Z' => fmt.write_str(if tm.tm_utcoff == 0 { "UTC"} else { "" }), - 'z' => { - let sign = if tm.tm_utcoff > 0 { '+' } else { '-' }; - let mut m = abs(tm.tm_utcoff) / 60; - let h = m / 60; - m -= h * 60; - write!(fmt, "{}{:02}{:02}", sign, h, m) - } - '+' => write!(fmt, "{}", tm.rfc3339()), - '%' => fmt.write_str("%"), - _ => unreachable!(), - } -} - -fn abs(i: i32) -> i32 { - if i < 0 {-i} else {i} -} |