Add files via upload

This commit is contained in:
hdrlux
2023-07-24 10:38:11 +02:00
committed by GitHub
parent b84ddd26be
commit db4934d1bc
16 changed files with 1048 additions and 0 deletions

35
ISOWeekNumber.cpp Normal file
View File

@@ -0,0 +1,35 @@
/*
ISOWeekNumber.cpp
MIT License
Copyright (c) 2023 hdrlux
*/
#include <Arduino.h> // for all the 'standard' Arduino stuff
#include "ISOWeekNumber.h"
byte ISOdayOfWeek(long days) { // TimeLib.h deviates from ISO8601 with Sunday = 1
// ONLY valid for Epoch year 1970
return (((days + 3) % DAYS_PER_WEEK) + 1); // Mon=1..Sun=7
}
byte ISOWeekNumber(time_t t) { // uses TimeLib.h - valid until 2099
// weeknumber ONLY valid for Mon=1..Sun=7 datelibrary
// calculations valid for ANY Epoch year, only relative dates
long NowDay = elapsedDays(t); // days_since_epoch: now
long CloseThu = NowDay - ISOdayOfWeek(NowDay) + 4; // days_since_epoch: closest Thursday from now
int ISOYear = year(CloseThu * SECS_PER_DAY); // Year for closest Thursday, may be different in first or last week
tmElements_t tm;
tm.Hour = 0;
tm.Minute = 0;
tm.Second = 0;
tm.Day = 4; // 4th day according ISO8601
tm.Month = 1; // Jan
tm.Year = CalendarYrToTm(ISOYear);
time_t JanFour = makeTime(tm); // date: Year-Jan-4
long JanFourDay = elapsedDays(JanFour); // days_since_epoch: Year-Jan-4
int ISOYearDay = NowDay - JanFourDay + ISOdayOfWeek(JanFourDay); // Day number in the ISOYear, range [1..371]
return (((ISOYearDay - 1) / 7) + 1); // Convert Day number in the ISOYear to ISOWeek number, range [1..53]
}
//End