5 #define isleap(y) (!((y) % 4) && ((y) % 100) || !((y) % 400))
6 #define SPD (24 * 60 * 60)
14 timezone
= tz
.tz_minuteswest
* 60;
17 static void tp2tm(struct tm
*tm
, time_t t
)
19 static int dpm
[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
23 tm
->tm_sec
= rem
% 60;
25 tm
->tm_min
= rem
% 60;
26 tm
->tm_hour
= rem
/ 60;
27 tm
->tm_wday
= (4 + days
) % 7;
29 /* calculating yday and year */
30 for (i
= 1970; days
>= 365 + isleap(i
); i
++)
31 days
-= 365 + isleap(i
);
32 tm
->tm_year
= i
- 1900;
35 /* calculating mday and mon */
37 if (isleap(i
) && days
== 59)
39 if (isleap(i
) && days
>= 59)
41 for (i
= 0; i
< 11 && days
>= dpm
[i
]; i
++)
47 struct tm
*localtime(time_t *t
)
51 tp2tm(&tm
, *t
- timezone
);
55 struct tm
*gmtime(time_t *t
)
62 time_t mktime(struct tm
*tm
)
64 static int dpm
[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
67 s
= tm
->tm_hour
* 3600 + tm
->tm_min
* 60 + tm
->tm_sec
;
68 for (i
= 70; i
< tm
->tm_year
; i
++)
69 d
+= 365 + isleap(1900 + i
);
70 tm
->tm_yday
= tm
->tm_mday
- 1;
71 for (i
= 0; i
< tm
->tm_mon
; i
++)
72 tm
->tm_yday
+= dpm
[i
];
75 return d
* 24 * 3600 + s
+ timezone
;