|
0
|
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 |
}
|