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

📄 cmp_longtime2.c

📁 seed格式数据解压程序,地震分析人员必备
💻 C
字号:
/*===========================================================================*//* DMC Interim     |              cmp_longtime             |         utility *//*===========================================================================*//*	Name:		cmp_longtime	Purpose:	compare two times in struct input_time format	Usage:		int cmp_longtime ();				struct input_time time1;				struct input_time time2;				long precision;				int result;				result = cmp_longtime (time1, time2, precision);	Input:		time1 = 1st time in struct input_time format				time2 = 2nd time in struct input_time format				precision = comparison precision in sec >= 0							(ie., 50% of test window)	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 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:	Ignores leap seconds				Ignores fracsecs in comparison (ie., does not round seconds)				Maximum effective precision is six months.	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_longtime (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 */	long				delta;	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;	delta = 1 + precision / ONEDAY;	if (diff > delta)		return (err = 1);					/* time1 >> time2 */	else if (diff < -delta)		return (err = -1);					/* time1 << time2 */	else	{										/* close--compute daytimes */		dtime1 += diff * ONEDAY;					/* difference in dates */		dtime1 += (time1.hour*3600) + (time1.minute*60) + time1.second;	/* sec*/		dtime2 += (time2.hour*3600) + (time2.minute*60) + time2.second;	/* sec*/	}/* 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 + -