示例#1
0
echs_idiff_t
echs_instant_diff(echs_instant_t end, echs_instant_t beg)
{
	int extra_df;
	int intra_df;

	/* just see what the intraday part yields for the difference */
	intra_df = end.H - beg.H;
	intra_df *= 60;
	intra_df += end.M - beg.M;
	intra_df *= 60;
	intra_df += end.S - beg.S;
	intra_df *= 1000;
	intra_df += end.ms - beg.ms;

	if (intra_df < 0) {
		intra_df += 24 * 60 * 60 * 1000;
		extra_df = -1;
	} else if (intra_df < 24 * 60 * 60 * 1000) {
		extra_df = 0;
	} else {
		extra_df = 1;
	}

	{
		unsigned int dom_end = __doy(end);
		unsigned int dom_beg = __doy(beg);
		int df_y = end.y - beg.y;

		if ((extra_df += dom_end - dom_beg) < 0) {
			df_y--;
		}
		extra_df += df_y * 365 + (df_y - 1) / 4;
	}

	return (echs_idiff_t){extra_df, intra_df};
}
示例#2
0
echs_idiff_t
echs_instant_diff(echs_instant_t end, echs_instant_t beg)
{
	int extra_df;
	int intra_df;

	/* just see what the intraday part yields for the difference */
	intra_df = end.H - beg.H;
	intra_df *= MINS_PER_HOUR;
	intra_df += end.M - beg.M;
	intra_df *= SECS_PER_MIN;
	intra_df += end.S - beg.S;
	intra_df *= MSECS_PER_SEC;
	intra_df += end.ms - beg.ms;

	if (intra_df < 0) {
		intra_df += MSECS_PER_DAY;
		extra_df = -1;
	} else if ((unsigned int)intra_df < MSECS_PER_DAY) {
		extra_df = 0;
	} else {
		extra_df = 1;
	}

	{
		unsigned int dsi_end = __jan00(end.y);
		unsigned int dsi_beg = __jan00(beg.y);
		unsigned int doy_end = __doy(end);
		unsigned int doy_beg = __doy(beg);

		extra_df += dsi_end - dsi_beg;
		extra_df += doy_end - doy_beg;
	}

	return (echs_idiff_t){extra_df * MSECS_PER_DAY + intra_df};
}