OLD | NEW |
1 long long __year_to_secs(long long year, int *is_leap) | 1 long long __year_to_secs(long long year, int* is_leap) { |
2 { | 2 if (year - 2ULL <= 136) { |
3 » if (year-2ULL <= 136) { | 3 int y = year; |
4 » » int y = year; | 4 int leaps = (y - 68) >> 2; |
5 » » int leaps = (y-68)>>2; | 5 if (!((y - 68) & 3)) { |
6 » » if (!((y-68)&3)) { | 6 leaps--; |
7 » » » leaps--; | 7 if (is_leap) |
8 » » » if (is_leap) *is_leap = 1; | 8 *is_leap = 1; |
9 » » } else if (is_leap) *is_leap = 0; | 9 } else if (is_leap) |
10 » » return 31536000*(y-70) + 86400*leaps; | 10 *is_leap = 0; |
11 » } | 11 return 31536000 * (y - 70) + 86400 * leaps; |
| 12 } |
12 | 13 |
13 » int cycles, centuries, leaps, rem; | 14 int cycles, centuries, leaps, rem; |
14 | 15 |
15 » if (!is_leap) is_leap = &(int){0}; | 16 if (!is_leap) |
16 » cycles = (year-100) / 400; | 17 is_leap = &(int){0}; |
17 » rem = (year-100) % 400; | 18 cycles = (year - 100) / 400; |
18 » if (rem < 0) { | 19 rem = (year - 100) % 400; |
19 » » cycles--; | 20 if (rem < 0) { |
20 » » rem += 400; | 21 cycles--; |
21 » } | 22 rem += 400; |
22 » if (!rem) { | 23 } |
23 » » *is_leap = 1; | 24 if (!rem) { |
24 » » centuries = 0; | 25 *is_leap = 1; |
25 » » leaps = 0; | 26 centuries = 0; |
26 » } else { | 27 leaps = 0; |
27 » » if (rem >= 200) { | 28 } else { |
28 » » » if (rem >= 300) centuries = 3, rem -= 300; | 29 if (rem >= 200) { |
29 » » » else centuries = 2, rem -= 200; | 30 if (rem >= 300) |
30 » » } else { | 31 centuries = 3, rem -= 300; |
31 » » » if (rem >= 100) centuries = 1, rem -= 100; | 32 else |
32 » » » else centuries = 0; | 33 centuries = 2, rem -= 200; |
33 » » } | 34 } else { |
34 » » if (!rem) { | 35 if (rem >= 100) |
35 » » » *is_leap = 0; | 36 centuries = 1, rem -= 100; |
36 » » » leaps = 0; | 37 else |
37 » » } else { | 38 centuries = 0; |
38 » » » leaps = rem / 4U; | 39 } |
39 » » » rem %= 4U; | 40 if (!rem) { |
40 » » » *is_leap = !rem; | 41 *is_leap = 0; |
41 » » } | 42 leaps = 0; |
42 » } | 43 } else { |
| 44 leaps = rem / 4U; |
| 45 rem %= 4U; |
| 46 *is_leap = !rem; |
| 47 } |
| 48 } |
43 | 49 |
44 » leaps += 97*cycles + 24*centuries - *is_leap; | 50 leaps += 97 * cycles + 24 * centuries - *is_leap; |
45 | 51 |
46 » return (year-100) * 31536000LL + leaps * 86400LL + 946684800 + 86400; | 52 return (year - 100) * 31536000LL + leaps * 86400LL + 946684800 + 86400; |
47 } | 53 } |
OLD | NEW |