44 lines
947 B
C
44 lines
947 B
C
/*
|
|
* gmtime - convert the calendar time into broken down time
|
|
*/
|
|
/* $Id$ */
|
|
|
|
#include <time.h>
|
|
#include <limits.h>
|
|
#include "loc_time.h"
|
|
|
|
struct tm*
|
|
gmtime(register const time_t* timer)
|
|
{
|
|
static struct tm br_time;
|
|
register struct tm* timep = &br_time;
|
|
time_t tim = *timer;
|
|
register unsigned long dayclock, dayno;
|
|
int year = EPOCH_YR;
|
|
|
|
dayclock = (unsigned long)tim % SECS_DAY;
|
|
dayno = (unsigned long)tim / SECS_DAY;
|
|
|
|
timep->tm_sec = dayclock % 60;
|
|
timep->tm_min = (dayclock % 3600) / 60;
|
|
timep->tm_hour = dayclock / 3600;
|
|
timep->tm_wday = (dayno + 4) % 7; /* day 0 was a thursday */
|
|
while (dayno >= YEARSIZE(year))
|
|
{
|
|
dayno -= YEARSIZE(year);
|
|
year++;
|
|
}
|
|
timep->tm_year = year - YEAR0;
|
|
timep->tm_yday = dayno;
|
|
timep->tm_mon = 0;
|
|
while (dayno >= _ytab[LEAPYEAR(year)][timep->tm_mon])
|
|
{
|
|
dayno -= _ytab[LEAPYEAR(year)][timep->tm_mon];
|
|
timep->tm_mon++;
|
|
}
|
|
timep->tm_mday = dayno + 1;
|
|
timep->tm_isdst = 0;
|
|
|
|
return timep;
|
|
}
|