Stap 2: Daylight Savings Time
Dus deze stap vrij technisch is en kan worden overgeslagen als u niet geïnteresseerd bent:
Oke, dus er een bibliotheek van de Arduino geschreven is om verandert Daylight Savings Time:
https://github.com/JChristensen/timezone
Het niet zou echter bij het gebruik van de ESP8266 bibliotheek compileren. (Iets te maken met EEPROM.) Dus schreef ik mijn eigen code.
Hier is de huidige Amerikaanse regels voor Daylight Savings Time:
https://en.wikipedia.org/wiki/Daylight_saving_time_in_the_United_States
"Momenteel zomertijd begint op de tweede zondag in maart en eindigt op de eerste zondag in November, met de tijd veranderingen die plaatsvinden op 2:00 uur lokale tijd. Met een mnemotechnisch woordspeling verwijzend naar seizoenen, klokken "spring naar voren en terugvallen" — dat wil zeggen in het voorjaar (technisch late winter) de klokken zijn voorwaarts verplaatst vanaf 2:00 uur tot 03:00 uur, en in Val zijn verhuisden ze terug vanaf 2:00 uur tot 01:00 uur. "
Nou, als je hebt gedaan wat programmeren, dit vrij ingewikkeld wordt. Hier is wat ik deed.
De Arduino tijd bibliotheek, net als vele computers gebruikt iets genaamd Unix tijd:
https://en.wikipedia.org/wiki/Unix_time
Unix-tijd (ook bekend als de POSIX tijd of Epoch tijd) is een systeem voor het beschrijven van instants tijdig, gedefinieerd als het aantal seconden dat is verstreken sinds 00:00:00 uur Coordinated Universal Time (UTC), donderdag 1 januari 1970
Nu NTP en GPS gebruik maken van UTC. UTC is niet een tijdzone, maar het is gebaseerd op de tijd in Engeland, dus je moet het omzetten van lokale tijd en aangepast aan de Daylight Savings time.
Dus heb ik twee variabelen SpringChange en FallChange genoemd in Unix-tijdnotatie.
Vervolgens met behulp van NTP, vond ik het huidige jaar.
Vanaf het jaar berekend ik vervolgens de twee unix tijden voor de twee variabelen. Dit is lastig, omdat de tweede zondag in maart en de eerste zondag in November zijn niet dezelfde dag van jaar tot jaar. Maar één ding, die de bibliotheek van de tijd kan vertellen is een Unix-tijd gegeven, het kan het bepalen van de weekdag. Dus gebruik de maand, de dag en de dag, ik was in staat om erachter te komen de dagen van de verandering voor het jaar.
Dus als het programma een nieuwe UTC-tijd, krijgt als het groter is dan of gelijk aan (> =) SpringChange en minder dan (<) FallChange dan het is zomertijd (DST). Het is anders niet DST. Nu als u huidige lokale tijd, ik voor (in mijn geval) Mountain-tijd- en daglicht aanpassen tijd van daglichtbesparingen.