summaryrefslogtreecommitdiffstats
path: root/datetime.c
diff options
context:
space:
mode:
authormanuel <manuel@mausz.at>2013-02-04 00:08:53 +0100
committermanuel <manuel@mausz.at>2013-02-04 00:08:53 +0100
commit69aec538b456402170dc723af417ba5c05389c32 (patch)
treee6f34c543f17c6392447ea337b2e2868212424d1 /datetime.c
downloadqmail-69aec538b456402170dc723af417ba5c05389c32.tar.gz
qmail-69aec538b456402170dc723af417ba5c05389c32.tar.bz2
qmail-69aec538b456402170dc723af417ba5c05389c32.zip
qmail 1.03 import
Diffstat (limited to 'datetime.c')
-rw-r--r--datetime.c55
1 files changed, 55 insertions, 0 deletions
diff --git a/datetime.c b/datetime.c
new file mode 100644
index 0000000..7b8a803
--- /dev/null
+++ b/datetime.c
@@ -0,0 +1,55 @@
1/* 19950925 */
2#include "datetime.h"
3
4void datetime_tai(dt,t)
5struct datetime *dt;
6datetime_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}