Commit | Line | Data |
---|---|---|
5b62e993 MW |
1 | /* 19950925 */ |
2 | #include "datetime.h" | |
3 | ||
4 | void datetime_tai(dt,t) | |
5 | struct datetime *dt; | |
6 | datetime_sec t; | |
7 | { | |
8 | int day; | |
9 | int tod; | |
10 | int year; | |
11 | int yday; | |
12 | int wday; | |
13 | int mon; | |
14 | ||
15 | tod = t % 86400; | |
16 | day = t / 86400; | |
17 | if (tod < 0) { tod += 86400; --day; } | |
18 | ||
19 | dt->hour = tod / 3600; | |
20 | tod %= 3600; | |
21 | dt->min = tod / 60; | |
22 | dt->sec = tod % 60; | |
23 | ||
24 | wday = (day + 4) % 7; if (wday < 0) wday += 7; | |
25 | dt->wday = wday; | |
26 | ||
27 | day -= 11017; | |
28 | /* day 0 is march 1, 2000 */ | |
29 | year = 5 + day / 146097; | |
30 | day = day % 146097; if (day < 0) { day += 146097; --year; } | |
31 | /* from now on, day is nonnegative */ | |
32 | year *= 4; | |
33 | if (day == 146096) { year += 3; day = 36524; } | |
34 | else { year += day / 36524; day %= 36524; } | |
35 | year *= 25; | |
36 | year += day / 1461; | |
37 | day %= 1461; | |
38 | year *= 4; | |
39 | yday = (day < 306); | |
40 | if (day == 1460) { year += 3; day = 365; } | |
41 | else { year += day / 365; day %= 365; } | |
42 | yday += day; | |
43 | ||
44 | day *= 10; | |
45 | mon = (day + 5) / 306; | |
46 | day = day + 5 - 306 * mon; | |
47 | day /= 10; | |
48 | if (mon >= 10) { yday -= 306; ++year; mon -= 10; } | |
49 | else { yday += 59; mon += 2; } | |
50 | ||
51 | dt->yday = yday; | |
52 | dt->year = year - 1900; | |
53 | dt->mon = mon; | |
54 | dt->mday = day + 1; | |
55 | } |