| ... | @@ -207,16 +207,20 @@ fn parseCommitUserAndAt(input: string) !UserAndAt { | ... | @@ -207,16 +207,20 @@ fn parseCommitUserAndAt(input: string) !UserAndAt { |
| 207 | } | 207 | } |
| 208 | | 208 | |
| 209 | fn parseAt(time_part: string, tz_part: string) time.DateTime { | 209 | fn parseAt(time_part: string, tz_part: string) time.DateTime { |
| 210 | var at = time.DateTime.initUnix(extras.parseDigits(u64, time_part, 10) catch unreachable); | 210 | var at_s = extras.parseDigits(u64, time_part, 10) catch unreachable; |
| 211 | std.debug.assert(tz_part.len == 5); | 211 | std.debug.assert(tz_part.len == 5); |
| 212 | std.debug.assert(tz_part[0] == '-' or tz_part[0] == '+'); | 212 | std.debug.assert(tz_part[0] == '-' or tz_part[0] == '+'); |
| 213 | const sign: i8 = if (tz_part[0] == '+') 1 else -1; | 213 | const sign: i8 = if (tz_part[0] == '+') 1 else -1; |
| 214 | const hrs = extras.parseDigits(u7, tz_part[1..][0..2], 10) catch unreachable; | 214 | const hrs = extras.parseDigits(u7, tz_part[1..][0..2], 10) catch unreachable; |
| 215 | const mins = extras.parseDigits(u7, tz_part[3..][0..2], 10) catch unreachable; | 215 | const mins = extras.parseDigits(u7, tz_part[3..][0..2], 10) catch unreachable; |
| 216 | at.z_offset += hrs; | 216 | var z_offset: i8 = 0; |
| 217 | at.z_offset *= 4; | 217 | z_offset += hrs; |
| 218 | at.z_offset += mins / 15; | 218 | z_offset *= 4; |
| 219 | at.z_offset *= sign; | 219 | z_offset += mins / 15; |
| | 220 | z_offset *= sign; |
| | 221 | at_s = extras.safeAdd(at_s, @as(i32, z_offset) * 15 * time.s_per_min); |
| | 222 | var at: time.DateTime = .initUnix(at_s); |
| | 223 | at.z_offset = z_offset; |
| 220 | return at; | 224 | return at; |
| 221 | } | 225 | } |
| 222 | | 226 | |