welke functie voor zomertijd check is beter?
6 berichten
• Pagina 1 van 1
welke functie voor zomertijd check is beter?
ik heb altijd onderstaande functie gebruikt om te kijken of het zomertijd is of niet:
<code>
long adjustDstEurope(long epoch)
{
// last sunday of march
int beginDSTDate= (31 - (5* year(epoch) /4 + 4) % 7);
int beginDSTMonth=3;
//last sunday of october
int endDSTDate= (31 - (5 * year(epoch) /4 + 1) % 7);
int endDSTMonth=10;
// DST is valid as:
if (((month(epoch) > beginDSTMonth) && (month(epoch) < endDSTMonth))
|| ((month(epoch) == beginDSTMonth) && (day(epoch) >= beginDSTDate))
|| ((month(epoch) == endDSTMonth) && (day(epoch) < endDSTDate)))
return true; // DST europe = GMT +2
else return false; // nonDST europe = GMT +1
}
</code>
ik heb bovenstaande code ooit ergens gevonden maar nooit eigenlijk de logica van kunnen begrijpen, alhoewel het wel werkte.
Nu heb ik de functie wat aangepast.
<code>
boolean dst_check(long epoch) {
//day(); // the day now (1-31)
//weekday(); // day of the week (1-7), Sunday is day 1
if (day(epoch)>= 24+weekday(epoch) && month(epoch) == 3) ||
(month(epoch) > 3 && month(epoch) < 10) ||
(day(epoch)< 24+weekday(epoch) && month(epoch) == 10 )
return true; // DST europe = GMT +2
else return false; // nonDST europe = GMT +1
}
</code>
Wat denken jullie, is de 2e beter? Ik wil nl. zo weinig mogelijk geheugen gebruiken en niet teveel libraries laden.
<code>
long adjustDstEurope(long epoch)
{
// last sunday of march
int beginDSTDate= (31 - (5* year(epoch) /4 + 4) % 7);
int beginDSTMonth=3;
//last sunday of october
int endDSTDate= (31 - (5 * year(epoch) /4 + 1) % 7);
int endDSTMonth=10;
// DST is valid as:
if (((month(epoch) > beginDSTMonth) && (month(epoch) < endDSTMonth))
|| ((month(epoch) == beginDSTMonth) && (day(epoch) >= beginDSTDate))
|| ((month(epoch) == endDSTMonth) && (day(epoch) < endDSTDate)))
return true; // DST europe = GMT +2
else return false; // nonDST europe = GMT +1
}
</code>
ik heb bovenstaande code ooit ergens gevonden maar nooit eigenlijk de logica van kunnen begrijpen, alhoewel het wel werkte.
Nu heb ik de functie wat aangepast.
<code>
boolean dst_check(long epoch) {
//day(); // the day now (1-31)
//weekday(); // day of the week (1-7), Sunday is day 1
if (day(epoch)>= 24+weekday(epoch) && month(epoch) == 3) ||
(month(epoch) > 3 && month(epoch) < 10) ||
(day(epoch)< 24+weekday(epoch) && month(epoch) == 10 )
return true; // DST europe = GMT +2
else return false; // nonDST europe = GMT +1
}
</code>
Wat denken jullie, is de 2e beter? Ik wil nl. zo weinig mogelijk geheugen gebruiken en niet teveel libraries laden.
sudo rm -rf /
(Don't Drink and Root)
(Don't Drink and Root)
Advertisement
Re: welke functie voor zomertijd check is beter?
compileer ze allebei en kijk hoeveel byte het scheelt.
Ik vermoed dat het nauwelijks wat uitmaakt
Ik vermoed dat het nauwelijks wat uitmaakt
Re: welke functie voor zomertijd check is beter?
jouw versie zal niet werken want daar staat >=24+ en daar zou een boolean uit moeten komen maar je bent daar de haakjes vergeten en wat frits zegt is natuurlijk ook een punt maar ik heb moeite met al die || in het origineeel
paul deelen
shooter@home.nl
shooter@home.nl
Re: welke functie voor zomertijd check is beter?
Klopt, ik heb haakjes idd moeten toevoegen if (.....) return, anders compileerde hij niet.
Nou, ja .... ff 1,5 maand wachten dan weet ik of het werkt.....
Nou, ja .... ff 1,5 maand wachten dan weet ik of het werkt.....
sudo rm -rf /
(Don't Drink and Root)
(Don't Drink and Root)
Re: welke functie voor zomertijd check is beter?
Het belangrijkste is in eerste instantie dat het resultaat hetzelfde is.
Te bewijzen door een simpel programma en beide met elkaar te vergelijken.
En ja het resultaat is hetzelfde:
Toegevoegd het test programma:
Te bewijzen door een simpel programma en beide met elkaar te vergelijken.
En ja het resultaat is hetzelfde:
Toegevoegd het test programma:
- Code: Alles selecteren
#include <TimeLib.h>
long tm, tmStop, tmStep;
bool done = false;
void setup()
{
Serial.begin(9600);
// while (!Serial);
setTime(10, 0, 0, 1, 1, 1970); // Start tijd
tm = now();
setTime(10, 0, 0, 1, 1, 2024); // Eind tijd
tmStop = now();
tmStep = SECS_PER_DAY; // Stap grootte per dag
Serial.print("Start tijd: ");
printTime(tm);
Serial.print("Eind tijd: ");
printTime(tmStop);
}
void loop()
{
if (tm < tmStop)
{
// Test of de uitkomst hetzelfde is. (zoniet dan een melding)
if (adjustDstEurope(tm) != dst_check(tm))
{
Serial.print(adjustDstEurope(tm) ? "adjust: [False] " : "adjust: [True] ");
Serial.print(dst_check(tm) ? "dst_check: [False] " : "dst_check: [True] ");
printTime(tm);
}
tm += tmStep;
}
else
{
if (!done)
{
Serial.println("Done");
done = true;
}
}
}
void printTime(long t)
{
char s[20];
sprintf(s, "%d-%02d-%02d %02d:%02d", year(t), month(t), day(t), hour(t), minute(t));
Serial.println(s);
}
long adjustDstEurope(long epoch)
{
// last sunday of march
int beginDSTDate= (31 - (5* year(epoch) /4 + 4) % 7);
int beginDSTMonth=3;
//last sunday of october
int endDSTDate= (31 - (5 * year(epoch) /4 + 1) % 7);
int endDSTMonth=10;
// DST is valid as:
if (( (month(epoch) > beginDSTMonth) && (month(epoch) < endDSTMonth))
|| ((month(epoch) == beginDSTMonth) && (day(epoch) >= beginDSTDate))
|| ((month(epoch) == endDSTMonth) && (day(epoch) < endDSTDate)))
return true; // DST europe = GMT +2
else
return false; // nonDST europe = GMT +1
}
boolean dst_check(long epoch)
{
//day(); // the day now (1-31)
//weekday(); // day of the week (1-7), Sunday is day 1
if (day(epoch)>= (24 + weekday(epoch)) && month(epoch) == 3 ||
(month(epoch) > 3 && month(epoch) < 10) ||
(day(epoch)< (24+weekday(epoch)) && month(epoch) == 10 ))
return true; // DST europe = GMT +2
else
return false; // nonDST europe = GMT +1
}
Re: welke functie voor zomertijd check is beter?
<thumbs up>;-)</thumbs up>
sudo rm -rf /
(Don't Drink and Root)
(Don't Drink and Root)
6 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten