[linux] Arduino: wie weet hoe laat het is?

Daniel C. von Asmuth asmuth op bakunin.xs4all.nl
Do Apr 2 08:10:40 CEST 2020


Aldus schreef Paul Slootman op Wed, Apr 01, 2020 at 10:21:47PM +0200:
> On Wed 01 Apr 2020, paai wrote:
> > 
> > Ik gebruik nu ESPDateTime, alleen heeft die geen zomertijd. Maar vanavond ga
> > ik even kijken hoe je de unix-tijd van de laatste zondag 02:00 van een maand
> > berekent, wat niet zo'n heksentoer moet zijn, temeer omdat DateTime de
> > weekdag kan laten zien...
> 
> Waarom wil je dat moment weten?
> Je bent toch meer geinteresseerd in of het NU winter- of zomertijd is?
> 
> - is het maart of oktober? Dan moet je doordenken, anders weet je de
>   offset tov. UTC al en ben je klaar
> - Bepaal dag vd maand, is deze 25 of meer? Zo niet ben je klaar
> - Bepaal dag vd week, als het geen zondag is, dan moet je kijken of
>   zondag nog deze maand valt. Niet moeilijk als je weet wat de datum is
>   en wat de dag vd week is. Komt er geen zondag meer? Klaar
> - Komt zondag nog? Klaar
> - Is het zondag? Kijk dan hoe laat het is in UTC. Is het maart en na
>   01:00 dan is het zomertijd, anders als het oktober is en na 02:00 dan
>   is het wintertijd.
> 
> Aantal regels code zouden op een 25-regelig scherm moeten passen, lijkt
> mij.

C Programmeurs onder Linux hebben daar weinig moeite mee; het probleem zit
hem uitsluitend in de uren tussen 2:00 en 3:00 die in maart worden overgeslagen
en in oktober twee keer optreden.

Je gebruikt hiervoor de functie localtime (3) die een veld tm_gmtoff bevat met
daarin het aantal seconden dat je bij de UTC tijd moet optellen om de lokale
tijd te krijgen. Voor de rest moet je zorgen dat de juiste tijdzonde definities
geïnstalleerd zijn (zodat Tux weet wanneer zomertijd begint en eindigt) en dat
/etc/localtime naar de juiste tijdzone verwijst. De GLIBC standaard bibliotheek
houdt rekening met de TZ omgevingsvariabele. In de zomer type je iets als
	export TZ="koffietijd-2"
en in de winter
	export TZ="koffietijd-1"
en je zult zien dat het date commando een andere uitvoer geeft. Dat is nodig omdat
gebruikers met SSH kunnen inloggen en zich in een andere tijdzone bevinden dan de
computer.

Misschien dat een Arduino niet de benodigde voorzieningen heeft.

Met vriendelijke groet,


Daniel von Asmuth

-- 
	
		How long it takes to reach your goal
		depends less on your speed than on your direction.


Meer informatie over de Linux maillijst