nntp2http.com
Posting
Suche
Optionen
Hilfe & Kontakt

Sekunden portabel zu struct tm

Von: Markus Wichmann (nullplan@gmx.net) [Profil]
Datum: 24.10.2009 16:01
Message-ID: <kvdbr6-476.ln1@www.wichi.de.vu>
Newsgroup: de.comp.lang.c
Hi all,

ich habe folgendes Problem: Gegeben sei eine Variable buf vom Typ
uint32_t. In ihr steht eine Zeit, kodiert als Sekunden seit dem
1.1.1900, 00:00 Uhr, UTC.  Nun ist die Frage, wie ich daraus halbwegs
systemunabhängig ein struct tm oder ein time_t mache.
Natürlich könnte
ich einfach die Sekunden zwischen dem 1.1.1970 und dem 1.1.1900 von der
Zahl einfach abziehen und das Ergebnis als time_t interpretieren lassen,
aber dabei gehe ich ja von der Annahme aus, dass die Epoche für den
time_t der 1.1.1970 und die Maßeinheit die Sekunde ist, und lasse
völlig
die Möglichkeit außen vor, dass Millisekunden benutzt worden sein
könnten, was ja nicht ganz unwahrscheinlich ist.

OK, prinzipiell geht ja

struct tm t;
t.tm_sec = buf % 60;
t.tm_min = (buf / 60) % 60;
t.tm_hour = (buf / 3600) % 24);

äh... und dann?

t.tm_mday = (buf / (3600 * 24)) % 31;

oder wie? Aber schon dieser Code geht irgendwie am Ziel vorbei, denn er
lässt Schaltsekunden völlig außer Acht. Schalttage
selbst sind nicht
unbedingt ein Problem, wenn ich irgendwann mal das Jahr ermittelt habe,
aber Schaltsekunden treten AFAIK völlig irregulär auf.

Wie also geht das korrekt?

Tschö,
Markus
--
Nur weil ein Genie nix reißt, muß ja nun nicht gleich jeder Idiot
pausieren... Bully hats ja auch geschafft.
-- gUnter nanonüm in de.alt.anime

[ Auf dieses Posting antworten ]

Antworten