Allow month and year to wrap in timezone calculation
This commit is contained in:
		
							parent
							
								
									efcb292998
								
							
						
					
					
						commit
						82bfd0471f
					
				
					 1 changed files with 34 additions and 0 deletions
				
			
		| 
						 | 
					@ -32,6 +32,8 @@ void WatchyRTC::read(tmElements_t & tm, int offsetInSeconds) {
 | 
				
			||||||
  tm.Minute = rtc_pcf.getMinute();
 | 
					  tm.Minute = rtc_pcf.getMinute();
 | 
				
			||||||
  tm.Second = rtc_pcf.getSecond();
 | 
					  tm.Second = rtc_pcf.getSecond();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  int year = tm.Year;
 | 
				
			||||||
 | 
					  int month = tm.Month;
 | 
				
			||||||
  int day = tm.Day;
 | 
					  int day = tm.Day;
 | 
				
			||||||
  int hour = tm.Hour;
 | 
					  int hour = tm.Hour;
 | 
				
			||||||
  int minute = tm.Minute;
 | 
					  int minute = tm.Minute;
 | 
				
			||||||
| 
						 | 
					@ -54,6 +56,38 @@ void WatchyRTC::read(tmElements_t & tm, int offsetInSeconds) {
 | 
				
			||||||
    hour = hour % 24;
 | 
					    hour = hour % 24;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bool leapYear = year % 4 == 0;
 | 
				
			||||||
 | 
					  if (leapYear) {
 | 
				
			||||||
 | 
					    if (month == 2 && day > 29) {
 | 
				
			||||||
 | 
					      month++;
 | 
				
			||||||
 | 
					      day = day % 29;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    if (month == 2 && day > 28) {
 | 
				
			||||||
 | 
					      month++;
 | 
				
			||||||
 | 
					      day = day % 28;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (month == 4 || month == 6 || month == 9 || month == 11) {
 | 
				
			||||||
 | 
					    if (day > 30) {
 | 
				
			||||||
 | 
					      month++;
 | 
				
			||||||
 | 
					      day = day % 30;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    if (day > 31) {
 | 
				
			||||||
 | 
					      month++;
 | 
				
			||||||
 | 
					      day = day % 31;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (month > 12 || month < 0) {
 | 
				
			||||||
 | 
					    year++;
 | 
				
			||||||
 | 
					    month = month % 12;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  tm.Year = year;
 | 
				
			||||||
 | 
					  tm.Month = month;
 | 
				
			||||||
  tm.Day = day;
 | 
					  tm.Day = day;
 | 
				
			||||||
  tm.Hour = hour;
 | 
					  tm.Hour = hour;
 | 
				
			||||||
  tm.Minute = minute;
 | 
					  tm.Minute = minute;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue