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

📄 cmp_time.c

📁 seed格式数据解压程序,地震分析人员必备
💻 C
字号:
/*===========================================================================*//* DMC Interim     |                cmp_time               |         utility *//*===========================================================================*//*	Name:	cmp_time	Purpose:compare two times in struct input_time format	Usage:	int cmp_time ();			struct input_time time1;			struct input_time time2;			long precision;			int result;			result = cmp_time (time1, time2, precision);	Input:	time1 = 1st time in struct input_time format			time2 = 2nd time in struct input_time format			precision = comparison precision in e-04 sec >= 0					(e.g., 50% of sample interval)	Output:	result =  0 if time1 == time2 (diff <= precision)			       = -1 if time1 < time2			       =  1 if time1 > time2	Externals:	none	Warnings:	none	Errors:		none	Called by:	anything	Calls to:	none	Algorithm:		Compute dates relative to january 1 of the lesser year and		compare. If difference greater than 2 days, return appropriate		inequality.  Otherwise, compute daytimes in e-04 sec relative		to midnite.  Take any difference in date into account and		compare the times.  If difference <= precision, return an		equality, else return the appropriate inequality.	Notes:	The time structure looks like:			struct input_time			{				unsigned short int year;				unsigned short int day;				char hour;				char minute;				char second;				unsigned short int fracsec;			};	Problems:Maximum effective precision is 48 hours.		Tolerances of greater than ~59.65 hours will overflow.	Debug:	level D_MIN -		level D_MED -		level D_MAX - print out start, comparison and finish notices	References:	none	Language:	ANSI standard C	Author:		Kevin MacKenzie		28 mar 1989	Revisions:*/#include "output.h"#define isaleap(year) (((year%100 != 0) && (year%4 == 0)) || (year%400 == 0))#define ONEDAY 86400L		/* one day in sec */int cmp_time (time1, time2, precision)struct	input_time time1;		/* first time to compare */struct	input_time time2;		/* second time to compare */long	precision;              	/* comparison precision, e-04 sec */{	register long	diff;		/* value difference */	register long	dtime1 = 0;	/* daytime #1 in e-04 sec */	register long 	dtime2 = 0;	/* daytime #2 in e-04 sec */	unsigned short int lenyr;	/* length of year in days */	int err;			/* result */	if (precision < 0) 		precision = 0;		/* precision must be >= 0 */	/* compare years */	diff = (long)time1.year - (long)time2.year;		if (diff == 0)		;	/* difference < 1 year */	else 	if (diff == 1) 	{			/* difference near year end */ 		lenyr = (isaleap (time2.year)) ? 366 : 365;				/* get length of year */ 		time1.day += lenyr;	}	else 	if (diff == -1)	{		/* difference near year end */ 		lenyr = (isaleap (time1.year)) ? 366 : 365;			/* get length of year */		time2.day += lenyr;	}	else 	if (diff >  1)		return (err = 1);	/* time1 >>> time2 */	else 	if (diff < -1)		return (err = -1);	/* time1 <<< time2 */	/* compare dates */	diff = (long)time1.day - (long)time2.day;	if (diff > 1)		return (err = 1);	/* time1 >> time2 */	else 	if (diff < -1)		return (err = -1);	/* time1 << time2 */	else 	{		/* difference < 2 days */ 		dtime1 += diff * ONEDAY;		/* difference in dates */		dtime1 += (time1.hour*3600)+(time1.minute*60)+time1.second;		/* sec*/		dtime1 *= 10000;		/* convert sec to e-04 sec*/		dtime1 += time1.fracsec;		dtime2 += (time2.hour*3600)+(time2.minute*60)+time2.second;				/* sec*/		dtime2 *= 10000;		/* convert sec to e-04 sec*/		dtime2 += time2.fracsec;	}	/* compare daytimes */	if (dtime1 - dtime2 > precision)		return (err = 1);		/* time1 > time2 */	else 	if (dtime2 - dtime1 > precision)		return (err = -1);		/* time1 < time2 */	return (err = 0);			/* time1 == time2 */}

⌨️ 快捷键说明

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