Commit | Line | Data |
---|---|---|
2117e02e MW |
1 | #include "datetime.h" |
2 | ||
3 | /* roughly 100x faster than mktime() */ | |
4 | datetime_sec datetime_untai(dt) | |
5 | struct datetime *dt; | |
6 | { | |
7 | int year; | |
8 | int day; | |
9 | int mon; | |
10 | ||
11 | year = dt->year + 1900; | |
12 | ||
13 | mon = dt->mon; | |
14 | if (mon >= 2) { mon -= 2; } | |
15 | else { mon += 10; --year; } | |
16 | ||
17 | day = (dt->mday - 1) * 10 + 5 + 306 * mon; | |
18 | day /= 10; | |
19 | ||
20 | if (day == 365) { year -= 3; day = 1460; } | |
21 | else { day += 365 * (year % 4); } | |
22 | year /= 4; | |
23 | ||
24 | day += 1461 * (year % 25); | |
25 | year /= 25; | |
26 | ||
27 | if (day == 36524) { year -= 3; day = 146096; } | |
28 | else { day += 36524 * (year % 4); } | |
29 | year /= 4; | |
30 | ||
31 | day += 146097 * (year - 5); | |
32 | day += 11017; | |
33 | ||
34 | return ((day * 24 + dt->hour) * 60 + dt->min) * 60 + dt->sec; | |
35 | } |