Ricevo da un cliente la richiesta di una funzione per il calcolo del giorno progressivo dell’anno in base ad una data. Guardando un po su internet ho trovato una funzione in “C” per il calcolo che tiene conto anche degli anni bisestili, riporto la funzione:
int DoYCalc(int Day, int Month, int Year)
{
int n1=275*Month/9;
int n2=(Month+9)/12;
int n3=((Year-4*(Year/4)+2)/3)+1;
return(n1-(n2*n3)+Day-30);
}
Ho realizzato la funzione UINT DayOfYear(USINT Day, USINT Month, UINT Year) in linguaggio ST. Allego per il download un programma sorgente con la funzione realizzata ed un programma ST di test che esegue l’invio su porta seriale ad ogni secondo del valore di giorno dell’anno calcolato dalla funzione.
E’ possibile in debug modificare i valori di giorno, mese ed anno del programma di test per verificare il funzionamento della funzione (Download programma).