ymd2yd.c   [plain text]


/*
 * 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;
}