⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 caljulian.c

📁 网络时间协议NTP 源码 版本v4.2.0b 该源码用于linux平台下
💻 C
字号:
/* * caljulian - determine the Julian date from an NTP time. */#include <sys/types.h>#include "ntp_types.h"#include "ntp_calendar.h"#include "ntp_stdlib.h"#include "ntp_fp.h"#if 0/* * calmonthtab - days-in-the-month table */static u_short calmonthtab[11] = {	JAN,	FEB,	MAR,	APR,	MAY,	JUN,	JUL,	AUG,	SEP,	OCT,	NOV};voidcaljulian(	u_long		  		ntptime,	register struct calendar	*jt	){	u_long ntp_day;	u_long minutes;	/*	 * Absolute, zero-adjusted Christian era day, starting from the	 * mythical day 12/1/1 BC	 */	u_long acez_day;	u_long d400;				 /* Days into a Gregorian cycle */	u_long d100;				 /* Days into a normal century */	u_long d4;					 /* Days into a 4-year cycle */	u_long n400;				 /* # of Gregorian cycles */	u_long n100;				 /* # of normal centuries */	u_long n4;					 /* # of 4-year cycles */	u_long n1;					 /* # of years into a leap year */						 /*   cycle */	/*	 * Do the easy stuff first: take care of hh:mm:ss, ignoring leap	 * seconds	 */	jt->second = (u_char)(ntptime % SECSPERMIN);	minutes    = ntptime / SECSPERMIN;	jt->minute = (u_char)(minutes % MINSPERHR);	jt->hour   = (u_char)((minutes / MINSPERHR) % HRSPERDAY);	/*	 * Find the day past 1900/01/01 00:00 UTC	 */	ntp_day = ntptime / SECSPERDAY;	acez_day = DAY_NTP_STARTS + ntp_day - 1;	n400	 = acez_day/GREGORIAN_CYCLE_DAYS;	d400	 = acez_day%GREGORIAN_CYCLE_DAYS;	n100	 = d400 / GREGORIAN_NORMAL_CENTURY_DAYS;	d100	 = d400 % GREGORIAN_NORMAL_CENTURY_DAYS;	n4		 = d100 / GREGORIAN_NORMAL_LEAP_CYCLE_DAYS;	d4		 = d100 % GREGORIAN_NORMAL_LEAP_CYCLE_DAYS;	n1		 = d4 / DAYSPERYEAR;	/*	 * Calculate the year and year-of-day	 */	jt->yearday = (u_short)(1 + d4%DAYSPERYEAR);	jt->year	= (u_short)(400*n400 + 100*n100 + n4*4 + n1);	if (n100 == 4 || n1 == 4)	{	/*	 * If the cycle year ever comes out to 4, it must be December 31st	 * of a leap year.	 */	jt->month	 = 12;	jt->monthday = 31;	jt->yearday  = 366;	}	else	{	/*	 * Else, search forwards through the months to get the right month	 * and date.	 */	int monthday;	jt->year++;	monthday = jt->yearday;	for (jt->month=0;jt->month<11; jt->month++)	{		int t;		t = monthday - calmonthtab[jt->month];		if (jt->month == 1 && is_leapyear(jt->year))		t--;		if (t > 0)		monthday = t;		else		break;	}	jt->month++;	jt->monthday = (u_char) monthday;	}}#else/* Updated 2003-12-30 TMa   Uses common code with the *prettydate functions to convert an ntp   seconds count into a calendar date.   Will handle ntp epoch wraparound as long as the underlying os/library    does so for the unix epoch, i.e. works after 2038.*/voidcaljulian(	u_long		  		ntptime,	register struct calendar	*jt	){	struct tm *tm;	tm = ntp2unix_tm(ntptime, 0);	jt->hour = (u_char) tm->tm_hour;	jt->minute = (u_char) tm->tm_min;	jt->month = (u_char) (tm->tm_mon + 1);	jt->monthday = (u_char) tm->tm_mday;	jt->second = (u_char) tm->tm_sec;	jt->year = (u_short) (tm->tm_year + 1900);	jt->yearday = (u_short) (tm->tm_yday + 1);  /* Assumes tm_yday starts with day 0! */}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -