archie/prospero/lib/pfs/asntotime.c
2024-05-27 16:13:40 +02:00

48 lines
1.3 KiB
C

/*
* Copyright (c) 1991 by the University of Washington
* Copyright (c) 1993 by the University of Southern California
*
* For copying and distribution information, please see the files
* <uw-copyright.h> and <usc-copyr.h>
*/
#include <uw-copyright.h>
#include <time.h>
static month_start[12] = {0, 31, 59, 90, 120, 151,
181, 212, 243, 273, 304, 334};
time_t
asntotime(timestring)
char *timestring;
{
int tmp;
struct tm ts;
long seconds;
int numleap;
tmp = sscanf(timestring,"%4d%2d%2d%2d%2d%2d", &(ts.tm_year),
&(ts.tm_mon), &(ts.tm_mday), &(ts.tm_hour), &(ts.tm_min),
&(ts.tm_sec));
if(tmp != 6) return(0);
ts.tm_mon = ts.tm_mon - 1;
ts.tm_year = ts.tm_year - 1900;
/* The following may not be portable */
seconds = (ts.tm_year - 70) * 365 * 24 * 60 * 60;
seconds = seconds + (month_start[ts.tm_mon] * 24 * 60 * 60);
seconds = seconds + (ts.tm_mday * 24 * 60 * 60);
seconds = seconds + (ts.tm_hour * 60 * 60);
seconds = seconds + (ts.tm_min * 60);
seconds = seconds + ts.tm_sec;
/* Account for leap years (good until 2100) */
numleap = ts.tm_year - 72;
numleap = numleap / 4;
if((ts.tm_mon > 1) && ((ts.tm_year % 4) == 0)) numleap++;
seconds = seconds + (numleap * 24 * 60 * 60);
return(seconds);
}