welke functie voor zomertijd check is beter?

algemene C code
Gebruikers-avatar
Berichten: 55
Geregistreerd: 22 Sep 2016, 21:21

welke functie voor zomertijd check is beter?

Berichtdoor rene7777 » 24 Aug 2023, 16:22

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.
sudo rm -rf /
(Don't Drink and Root)

Advertisement

Berichten: 187
Geregistreerd: 26 Aug 2015, 11:57

Re: welke functie voor zomertijd check is beter?

Berichtdoor Frits1956 » 24 Aug 2023, 17:14

compileer ze allebei en kijk hoeveel byte het scheelt.
Ik vermoed dat het nauwelijks wat uitmaakt

Berichten: 4086
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: welke functie voor zomertijd check is beter?

Berichtdoor shooter » 27 Aug 2023, 23:02

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

Gebruikers-avatar
Berichten: 55
Geregistreerd: 22 Sep 2016, 21:21

Re: welke functie voor zomertijd check is beter?

Berichtdoor rene7777 » 31 Aug 2023, 08:07

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.....
sudo rm -rf /
(Don't Drink and Root)

Berichten: 89
Geregistreerd: 02 Nov 2022, 13:03

Re: welke functie voor zomertijd check is beter?

Berichtdoor ThHe » 31 Aug 2023, 21:09

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:
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
}

Gebruikers-avatar
Berichten: 55
Geregistreerd: 22 Sep 2016, 21:21

Re: welke functie voor zomertijd check is beter?

Berichtdoor rene7777 » 01 Sep 2023, 07:54

<thumbs up>;-)</thumbs up>
sudo rm -rf /
(Don't Drink and Root)

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten