ack/lang/cem/libcc.ansi/time/localtime.c

35 lines
866 B
C
Raw Normal View History

1989-06-12 15:22:14 +00:00
/*
* localtime - convert a calendar time into broken down time
*/
/* $Header$ */
#include <time.h>
#include "loc_incl.h"
/* We must be careful, since an int can't represent all the seconds in a day.
* Hence the adjustment of minutes when adding timezone and dst information.
* This assumes that both must be expressable in multiples of a minute.
* Furthermore, it is assumed that both fit into an integer when expressed as
* minutes (this is about 22 days, so this should not cause any problems).
*/
struct tm *
localtime(const time_t *timer)
{
struct tm *timep;
unsigned dst;
1989-12-18 15:33:48 +00:00
_tzset();
1989-06-12 15:22:14 +00:00
timep = gmtime(timer); /* tm->tm_isdst == 0 */
1989-12-18 15:33:48 +00:00
timep->tm_min -= _timezone / 60;
timep->tm_sec -= _timezone % 60;
1989-06-12 15:22:14 +00:00
mktime(timep);
dst = _dstget(timep);
if (dst) {
timep->tm_min += dst / 60;
1989-12-18 15:33:48 +00:00
timep->tm_sec += dst % 60;
1989-06-12 15:22:14 +00:00
mktime(timep);
}
return timep;
}