equal
deleted
inserted
replaced
|
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 } |