chiark / gitweb /
Merge branches 'idx/verh' and 'idx/qmqpc'
[qmail] / datetime_un.c
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 }