Exemple #1
0
char *MFDateGetNext () {
	static char time [MFDateStringLength];
	static struct MFDate_s date;
	int month;

	date.Year  = _MFCurrentDate.Year;
	date.Month = _MFCurrentDate.Month;
	date.Day   = _MFCurrentDate.Day + 1;

	if (date.Day > _MFDateMonthLength (date.Year, date.Month)) {
		date.Day = 1;
		date.Month++;
		if (date.Month > 12) {
			date.Month = 1;
			if (date.Year != MFDefaultMissingInt) date.Year++;
		}
	}

	date.DayOfYear = 0;
	for (month = 1;month < _MFCurrentDate.Month;++month)
		date.DayOfYear += _MFDateMonthLength (date.Year,month);
	date.DayOfYear += date.Day;

	if (date.Year != MFDefaultMissingInt) sprintf (time,"%4d",date.Year);
	else strcpy (time,MFDateClimatologyYearStr);

	if (date.Month   == MFDefaultMissingInt) return (time);
	sprintf (time + strlen (time),"-%02d",date.Month);
	if (date.Day     == MFDefaultMissingInt) return (time);
	sprintf (time + strlen (time),"-%02d",date.Day);
	return (time);
}
Exemple #2
0
char *MFDateAdvance () {
	int month;

	_MFCurrentDate.Day++;
	if (_MFCurrentDate.Day > _MFDateMonthLength (_MFCurrentDate.Year,_MFCurrentDate.Month)) {
		_MFCurrentDate.Day = 1;
		_MFCurrentDate.Month++;
		if (_MFCurrentDate.Month > 12) {
			_MFCurrentDate.Month = 1;
			if (_MFCurrentDate.Year == MFDefaultMissingInt) return ((char *) NULL);
			_MFCurrentDate.Year++;
		}
	}
	_MFCurrentDate.DayOfYear = 0;
	for (month = 1;month < _MFCurrentDate.Month;++month)
		_MFCurrentDate.DayOfYear += _MFDateMonthLength (_MFCurrentDate.Year,month);
	_MFCurrentDate.DayOfYear += _MFCurrentDate.Day;
	return (_MFDateCompare (&_MFCurrentDate,&_MFEndDate) <= 0 ? MFDateGetCurrent () : (char *) NULL);	
}
Exemple #3
0
static bool _MFDateSet (struct MFDate_s *date,char *dateString) {
	int month;
	date->Year = date->Month = date->Day = MFDefaultMissingInt;
	if ((strncmp (dateString,MFDateClimatologyYearStr,strlen (MFDateClimatologyYearStr)) != 0) &&
		 (sscanf (dateString,"%d",&(date->Year)) != 1)) {
		CMmsgPrint (CMmsgAppError,"Error: Invalid date [%s] in: %s:%d",dateString,__FILE__,__LINE__);
		return (false);
	}
	date->DayOfYear = 183;
	if (strlen (dateString) == 4) return (true);
	if (sscanf (dateString + 5,"%d",&(date->Month)) != 1) {
		CMmsgPrint (CMmsgAppError,"Error: Invalid date [%s] in: %s:%d",dateString,__FILE__,__LINE__);
		return (false);
	}
	date->DayOfYear = 0;
	for (month = 1;month < date->Month;++month) date->DayOfYear += _MFDateMonthLength (date->Year,month);
	if (strlen (dateString) == 7) { date->DayOfYear +=_MFDateMonthLength (date->Year,month) / 2; return (true); }
	if (sscanf (dateString + 8,"%d",&(date->Day)) != 1) {
		CMmsgPrint (CMmsgAppError,"Error: Invalid date [%s] in: %s:%d",dateString,__FILE__,__LINE__);
		return (false);
	}
	date->DayOfYear += date->Day;
	return (true);
}
Exemple #4
0
int MFDateGetMonthLength  () { return (_MFDateMonthLength (_MFCurrentDate.Year,_MFCurrentDate.Month)); }
Exemple #5
0
int  MFDateTimeStepLength (const char *timeStr, int timeStep) {
    int year, month, leapYear, monthLen;
    int nStep = 0;
    char scanStr [strlen (MFDateClimatologyYearStr) + 1];

    switch (timeStep) {
        case MFTimeStepYear:  if (strlen (timeStr) ==  4) return (1); break;
        case MFTimeStepMonth: if (strlen (timeStr) ==  7) return (1); break;
        case MFTimeStepDay:   if (strlen (timeStr) == 10) return (1); break;
        case MFTimeStepHour:  if (strlen (timeStr) == 13) return (1); break;
    }
    if (strncmp (timeStr,MFDateClimatologyYearStr,strlen (MFDateClimatologyYearStr)) == 0) {
        year = MFDefaultMissingInt;
        leapYear = 0;
    } else {
        strncpy (scanStr,timeStr,strlen (MFDateClimatologyYearStr));
        scanStr [strlen (MFDateClimatologyYearStr)] = 0;
        if (sscanf (scanStr,"%d", &year) != 1) {
            CMmsgPrint (CMmsgUsrError,"Date scanning error in: %s:%d",__FILE__,__LINE__);
            return (0);
        }
        leapYear = _MFDateLeapYear (year);
    }
    if (strlen (timeStr) > strlen (MFDateClimatologyYearStr)) {
        strncpy (scanStr,timeStr + strlen (MFDateClimatologyYearStr) + 1,2);
        scanStr [2] = 0;
        if (sscanf (scanStr,"%d", &month) != 1) {
            CMmsgPrint (CMmsgUsrError,"Date scanning error in: %s:%d",__FILE__,__LINE__);
            return (0);
        }
        monthLen = _MFDateMonthLength(year,month);
    }
    switch (strlen (timeStr)) {
        case 4:
            switch (timeStep) {
                case MFTimeStepYear:  nStep  = 1; break;
                default:              nStep  = 0; break;
            }
            break;
        case 7:
            switch (timeStep) {
                case MFTimeStepYear:  nStep  = 12; break;
                case MFTimeStepMonth: nStep  =  1; break;
                default:              nStep  =  0; break;
            }
            break;
        case 10:
            switch (timeStep) {
                case MFTimeStepYear:  nStep = 365 + leapYear; break;
                case MFTimeStepMonth: nStep = monthLen;       break;
                case MFTimeStepDay:   nStep = 1;              break;
                default:              nStep = 0;              break;
            }
            break;
        case 13:
            switch (timeStep) {
                case MFTimeStepYear:  nStep = (365 + leapYear) * 24;  break;
                case MFTimeStepMonth: nStep = monthLen * 24;          break;
                case MFTimeStepDay:   nStep = 24;                     break;
                case MFTimeStepHour:  nStep = 1;                      break;
                default:              nStep = 0;                      break;
            }
            break;
    }
    return (nStep);
}