questo funziona:
comuqnue ad occhio hai solo sbagliato le dimensioni delle costanti
int swRTC::updateDate(){
unsigned long time = getTimestamp();
/*
Serial.print( "timestamp: " );
Serial.println( time );
*/
unsigned long day = time/(60L*60L*24L);
float remaining = time-day*(60L*60L*24L);
/*
Serial.println( remaining );
Serial.print( "day: " );
Serial.println( day );
*/
int year = (day / 365.2422);
float dayRemaining = day-year*365.2422;
year+=1900;
/*
Serial.print( "year: " );
Serial.println( year );
Serial.println( dayRemaining );
*/
if (dayRemaining>=365.2422)
return 1;//my math is wrong!
if (year<1900)
return 2;//year not supported!
/*
Serial.print( "dayRemaining: " );
Serial.println( dayRemaining );
*/
int month=0;
while (dayRemaining > daysPerMonth[month]){
dayRemaining -= daysPerMonth[month];
// Serial.print( "added month: " );
// Serial.println( dayRemaining );
month++;
}
month++;//because month 0 doesn't exist
/*
Serial.print( "month: " );
Serial.println( month );
*/
if (month>12)
return 3;//my math is wrong!
// Serial.println( dayRemaining );
if (dayRemaining>=(60L*60L*24L))
return 4;//my math is wrong!
/*
Serial.print( "dayRemaining: " );
Serial.println( dayRemaining );
*/
day=dayRemaining;
if (dayRemaining-day>0){ //add partial day!
day++;
}
int hours = remaining/(60L*60L);
remaining = remaining-hours*(60L*60L);
/*
Serial.println( remaining );
Serial.print( "hours: " );
Serial.println( hours );
*/
if (remaining>=(60L*60L))
return 5;//my math is wrong!
int minutes = remaining/(60L);
remaining = remaining-minutes*(60L);
/*
Serial.print( "minutes: " );
Serial.println( minutes );
Serial.print( "seconds: " );
Serial.println( remaining );
*/
if (remaining>=60)
return 6;//my math is wrong!
now.year = year;
now.month = month;
now.day = day;
now.hour = hours;
now.minute = minutes;
now.second = remaining;
return 0;
}