Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: thetrue am 05. August 2006, 22:19
-
moin,
ich dachte mir, dass ich Unix-Timestamp als zeit in meinem FS verwende...
nun ist das Problem da, ich weiß nicht wie ich von Timestamp das Datum in d.m.Y h.i.s berechne ....
weiß einer von euch wie das geht???
achja und wie geht den auch umgekehrt?
-
hi,
Du dividierst zuerst den Timestamp durch (365 * 24 * 60 * 60) [ein jahr in sekunden], addierst das zu 1970 dazu, dann hast du das Jahr des timestamps. Der Rest dieser Division sind die verbleibenden sekunden die du anschließend in Tage umrechnest. Mit ein paar ifs findest du dannRden Monat raus und den genauen Tag des Monats. Danach den rest von der Umrechnung in Tage hernehmen und in Stunden umrechnen. Wieder den Rest in minuten umrechnen. Der letzte Rest sind dann wohl die Sekunden.
Das Schaltjahr und die Schaltsekunden musst du extra noch einbauen, aber das ergibt sich ja dann.
Umgekehrt: Viel multiplizieren, ein paar ifs
Du hättest es auch durch selbst nachdenken lösen können :wink:
-
öhm, das ist nix neues ^^
doch die ifs ... hmm
-
Was hättest du erwartet? Nen C++ Sourcecode der alle Features ausnutzt? Also Templates, multiple inheritance, function & operator overloading, runtime-typeinformation, exceptions? Evtl. noch mit dem configscript und nem Makefile?
Wie gesagt:
Du hättest es auch durch selbst nachdenken lösen können :wink:
btw. hat nix mit lowlevel zu tun => @mod, bitte verschieben
-
Moin
aber bitte die Schaltjahre nicht unterschlagen. Die sekunden kann man vergessen, die werden soweit ich weis nicht berücksichtigt.
und was alles ein schaltjahr ist sollte ja bekant sein oder? 4 / 100 / 400
gruss
-
Jedes 100. Jahr ist KEIN Schaltjahr....dafür wieder jedes Vierhundertste.
-
Jedes 100. Jahr ist KEIN Schaltjahr....dafür wieder jedes Vierhundertste.
doch jedes. 4. und 100 ist dann das 25. schaltjahr oder nicht....
-
Oh mann.....Dann halt eben:
Wenn ein Jahr zwar durch 4 aber auch durch 100 teilbar ist, ist es trotzdem kein Schaltjahr.
Ist es aber durch 400 teilbar ist es wieder eins.
-
Und wann begann das erste Schaltjahr? ^^
bitmaster
-
aufjedenfall war 2004 ein Schaltjahr,
das weis ich noch, weil 2000 eben keins war, obwohl eigentlich eins hätte sein müssen,
aber das war ja eins von den hundertsten
also brauch man das nur noch auf 1970 zurückrechnen
-
Doch 2000 war eins!!!!!
2000 MOD 400 = 0
-
Die Schaltjahre wurden mit dem Gregorianischem Kalender um 1582 eingeführt.
-
Vielleicht muss man sogar noch Schaltsekunden berücksichtigen, weiß aber nicht ob das irgendein OS macht.
-
Also Jungs. Folgendes ist bei Wikipedia nachzulesen:
Die Schaltregeln [Bearbeiten]
* Nach der grundsätzlich weiterhin gültigen Julianischen Schaltregel weisen Jahre, deren Zahlen durch 4 dividiert natürliche Zahlen ergeben, im Februar einen 29. Tag ("Schalttag") auf und umfassen dadurch als Schaltjahre 366 Tage.
* Die Gregorianische Schaltregel bestimmt hiervon eine Ausnahme: Keine Schaltjahre sind diejenigen Säkular-Jahre (Jahre, deren Zahl am Ende zwei Nullen aufweist), deren Zahl durch 400 dividiert keine natürliche Zahl ergibt. (Deshalb waren die Jahre 1700, 1800 und 1900 keine Schaltjahre, und auch die Jahre 2100, 2200 und 2300 werden keine Schaltjahre sein.)
oder:
* Ist die Jahreszahl durch 4 teilbar, aber nicht durch 100, dann ist es ein Schaltjahr mit 366 Tagen. Beispiele: 1980, 1972, 1720.
* Ist die Jahreszahl durch 100 teilbar, aber nicht durch 400, dann ist das Jahr ein gewöhnliches Gemeinjahr und hat nur 365 Tage, z. B. in den Jahren 1700, 1800 und 1900 oder ferner 2100.
* Ist die Jahreszahl durch 400 teilbar, ist das Jahr ein Schaltjahr. Die Jahre 1600 und 2000 waren in Übereinstimmung mit der Julianischen Schaltregel Schaltjahre zu 366 Tagen.
oder
einfach zu merkende Regel:
* Ein Schaltjahr ist alle vier Jahre (1992 und 1996 waren z.B. Schaltjahre)
* alle hundert Jahre nicht (1700 und 1800 waren keine Schaltjahre)
* und alle vierhundert Jahre doch (2000 war doch Schaltjahr)
wem das nicht reicht der kann sich das nochmal direkt durchlesen unter http://de.wikipedia.org/wiki/Schaltjahr
Und nun zu den eigentlichen Problem. Den einzigen Beispielcode den ich auf die Schnelle gefunden habe ist in PHP geschrieben aber villeicht hilft es dir ja weiter.
<?php
include '../includes/Head.inc';
/* Umrechnungsfaktoren */
$umminute = 60;
$umstunde = 3600;
$umtag = 86400;
$umwoche = 604800;
$umjahr = 31556952; /* Laut Wikipedia hat das durchschnittliche Jahr 365 Tage, 5 Stunden, 49 Minuten und 12 Sekunden. */
$ummonat = $umjahr / 12;
/* time() in Minuten, Stunden, Tagen, Wochen, Monaten und Jahren */
$minuten = time() / $umminute;
$stunden = time() / $umstunde;
$tage = time() / $umtag;
$wochen = time() / $umwoche;
$monate = time() / $ummonat;
$jahre = time() / $umjahr;
echo "<table>";
echo "<tr><td>time():</td><td>" . time() . "</td></tr>";
echo "<tr><td>time() in Minuten:</td><td>" . $minuten . "</td></tr>";
echo "<tr><td>time() in Stunden:</td><td>" . $stunden . "</td></tr>";
echo "<tr><td>time() in Tagen:</td><td>" . $tage . "</td></tr>";
echo "<tr><td>time() in Wochen:</td><td>" . $wochen . "</td></tr>";
echo "<tr><td>time() in Monaten:</td><td>" . $monate . "</td></tr>";
echo "<tr><td>time() in Jahren:</td><td>" . $jahre . "</td></tr>";
echo "</table>";
/*
Seit dem 01.01.1970 sind ... vergangen - Versuch 1
*/
$bla = floor($jahre) . " Jahre, ";
$bla = $bla . floor((time() % $umjahr)/$ummonat) . " Monate, ";
$bla = $bla . floor(((time() % $umjahr)%$ummonat)/$umwoche) . " Wochen, ";
$bla = $bla . floor((((time() % $umjahr)%$ummonat)%$umwoche)/$umtag) . " Tage, ";
$bla = $bla . floor(((((time() % $umjahr)%$ummonat)%$umwoche)%$umtag)/$umstunde) . " Stunden, ";
$bla = $bla . floor((((((time() % $umjahr)%$ummonat)%$umwoche)%$umtag)%$umstunde)/$umminute) . " Minuten und ";
$bla = $bla . floor(((((((time() % $umjahr)%$ummonat)%$umwoche)%$umtag)%$umstunde)%$umminute)) . " Sekunden <br><br>";
echo $bla;
/*
Seit dem 01.01.1970 sind ... vergangen - Versuch 2
*/
$monate2 = floor((time() - (floor($jahre)*$umjahr))/$ummonat);
$wochen2 = floor((time() - (floor($jahre)*$umjahr) - ($monate2*$ummonat))/$umwoche);
$tage2 = floor((time() - (floor($jahre)*$umjahr) - ($monate2*$ummonat) - ($wochen2*$umwoche))/$umtag);
$stunden2 = floor((time() - (floor($jahre)*$umjahr) - ($monate2*$ummonat) - ($wochen2*$umwoche) - ($tage2*$umtag))/$umstunde);
$minuten2 = floor((time() - (floor($jahre)*$umjahr) - ($monate2*$ummonat) - ($wochen2*$umwoche) - ($tage2*$umtag) - ($stunden2*$umstunde))/$umminute);
$sekunden2 = floor((time() - (floor($jahre)*$umjahr) - ($monate2*$ummonat) - ($wochen2*$umwoche) - ($tage2*$umtag) - ($stunden2*$umstunde) - ($minuten2*$umminute)));
$bla2 = floor($jahre) . " Jahre, ";
$bla2 = $bla2 . $monate2 . " Monate, ";
$bla2 = $bla2 . $wochen2 . " Wochen, ";
$bla2 = $bla2 . $tage2 . " Tage, ";
$bla2 = $bla2 . $stunden2 . " Stunden, ";
$bla2 = $bla2 . $minuten2 . " Minuten und ";
$bla2 = $bla2 . $sekunden2 . " Sekunden <br><br>";
echo $bla2;
include '../includes/Foot.htm';
?>