IP-Time Clock del 1 (2 / 3 steg)
Steg 2: Sommartid
Så detta steg är ganska tekniskt och förs.cykeletapper om inte du är intresserad av:
Okej, så det finns en Arduino bibliotek skrivet att hantera förändringar sommartid:
https://github.com/JChristensen/timezone
Men skulle inte det sammanställa när du använder ESP8266 biblioteket. (Något att göra med EEPROM.) Så skrev jag min egen kod.
Här är de nuvarande amerikanska reglerna för sommartid:
https://en.wikipedia.org/wiki/Daylight_saving_time_in_the_United_States
"För närvarande sommartid börjar den andra söndagen i mars och slutar den första söndagen i November, med de tid förändringarna på 2:00 lokal tid. Med en mnemonic ord spela hänvisar till årstiderna, ur "spring fram och falla tillbaka" – det vill säga under våren (tekniskt vårvintern) flyttas klockorna fram från 2:00 till klockan 3:00 och under hösten flytta tillbaka från 2:00 till 1:00. "
Tja, om du gjort några programmering, detta blir ganska komplicerat. Här är vad jag gjorde.
Arduino tid biblioteket, som många datorer använder något som kallas Unix Time:
https://en.wikipedia.org/wiki/Unix_time
UNIX time (även känd som POSIX eller epok) är ett system för att beskriva ögonblickar i tid, definierad som antalet sekunder som förflutit sedan 00:00:00 Koordinerad universell tid (UTC), torsdag den 1 januari 1970
Nu använder NTP och GPS UTC. UTC är inte en tidszon men det bygger på tiden i England så du måste konvertera den till lokal tid och justera för Daylight Savings time.
Så skapade jag två variabler kallas SpringChange och FallChange i Unix time format.
Sedan använda NTP, jag hittade det aktuella året.
Från år beräknade jag sedan två unix tider för de två variablerna. Detta är knepigt eftersom den andra söndagen i mars och den första söndagen i November inte är samma dag från år till år. Men en sak tid biblioteket kan berätta ges en Unix time, kan den bestämma veckodagen. Så använder månaden, dagen och vardag, jag kunde lista ut de ändra dagarna för året.
Så när programmet blir en ny UTC-tid, om det är större än eller lika med (> =) SpringChange och mindre än (<) FallChange än det är sommartid (DST). Annars är det inte DST. Nu för att få aktuell lokal tid, jag justera för (i mitt fall) Mountain Time och dagsljus besparingar tid.