Skip to content

Commit d6219df

Browse files
committed
Merge pull request time-rs#8 from nicolai86/master
properly parse timezones specified as %z
2 parents f8c6b51 + ed028b9 commit d6219df

File tree

1 file changed

+9
-3
lines changed

1 file changed

+9
-3
lines changed

src/lib.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1170,13 +1170,18 @@ pub fn strptime(s: &str, format: &str) -> Result<Tm, ParseError> {
11701170
let range = s.char_range_at(pos);
11711171

11721172
if range.ch == '+' || range.ch == '-' {
1173+
let sign = if range.ch == '+' { 1 } else { -1 };
1174+
11731175
match match_digits(s, range.next, 4u, false) {
11741176
Some(item) => {
11751177
let (v, pos) = item;
11761178
if v == 0_i32 {
11771179
tm.tm_utcoff = 0_i32;
1180+
} else {
1181+
let hours = v / 100_i32;
1182+
let minutes = v - hours * 100_i32;
1183+
tm.tm_utcoff = sign * (hours * 60_i32 * 60_i32 + minutes * 60_i32);
11781184
}
1179-
11801185
Ok(pos)
11811186
}
11821187
None => Err(InvalidZoneOffset)
@@ -1551,8 +1556,9 @@ mod tests {
15511556
assert!(test("09", "%y"));
15521557
assert!(strptime("-0000", "%z").unwrap().tm_utcoff ==
15531558
0);
1554-
assert!(strptime("-0800", "%z").unwrap().tm_utcoff ==
1555-
0);
1559+
assert_eq!(-28800, strptime("-0800", "%z").unwrap().tm_utcoff);
1560+
assert_eq!(28800, strptime("+0800", "%z").unwrap().tm_utcoff);
1561+
assert_eq!(5400, strptime("+0130", "%z").unwrap().tm_utcoff);
15561562
assert!(test("%", "%%"));
15571563

15581564
// Test for #7256

0 commit comments

Comments
 (0)