2003-12-04 19:23:34 +03:00
|
|
|
/* $NetBSD: ymd2yd.c,v 1.2 2003/12/04 16:23:37 drochner Exp $ */
|
2000-03-29 16:38:44 +04:00
|
|
|
|
|
|
|
/*
|
|
|
|
* ymd2yd - compute the date in the year from y/m/d
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "ntp_fp.h"
|
|
|
|
#include "ntp_unixtime.h"
|
|
|
|
#include "ntp_stdlib.h"
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Tables to compute the day of year from yyyymmdd timecode.
|
|
|
|
* Viva la leap.
|
|
|
|
*/
|
|
|
|
static int day1tab[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
|
|
|
static int day2tab[] = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
|
|
|
|
|
|
|
|
int
|
|
|
|
ymd2yd(
|
|
|
|
int y,
|
|
|
|
int m,
|
|
|
|
int d
|
|
|
|
)
|
|
|
|
{
|
|
|
|
int i, *t;
|
|
|
|
|
|
|
|
if (m < 1 || m > 12 || d < 1)
|
|
|
|
return (-1);
|
|
|
|
|
|
|
|
if (((y%4 == 0) && (y%100 != 0)) || (y%400 == 0))
|
|
|
|
t = day2tab; /* leap year */
|
|
|
|
else
|
|
|
|
t = day1tab; /* not a leap year */
|
|
|
|
if (d > t[m - 1])
|
|
|
|
return (-1);
|
|
|
|
for (i = 0; i < m - 1; i++)
|
|
|
|
d += t[i];
|
|
|
|
return d;
|
|
|
|
}
|