summaryrefslogtreecommitdiffstats
path: root/datetime_un.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_un.c
downloadqmail-69aec538b456402170dc723af417ba5c05389c32.tar.gz
qmail-69aec538b456402170dc723af417ba5c05389c32.tar.bz2
qmail-69aec538b456402170dc723af417ba5c05389c32.zip
qmail 1.03 import
Diffstat (limited to 'datetime_un.c')
-rw-r--r--datetime_un.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/datetime_un.c b/datetime_un.c
new file mode 100644
index 0000000..b5048f8
--- /dev/null
+++ b/datetime_un.c
@@ -0,0 +1,35 @@
1#include "datetime.h"
2
3/* roughly 100x faster than mktime() */
4datetime_sec datetime_untai(dt)
5struct 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}