Zeit
-
hi
wie kann ich abfragen ob es z.B. schon später als 18 Uhr und früher als 6 Uhr ist?
Ein Beispiel mit dem boost lib(posix time) wäre auch gut, muss aber nicht sein
-
...
-
Swordfish: Wieso initialisierst du
raw_time?Zeile 17 schrieb:
local_time->tm_min <= 59Immer true.
z.B. schon später als 18 Uhr und früher als 6 Uhr ist?
Das ist überhaupt nicht möglich. Du meinst wohl die Disjunktion.
Und dafür reichen die C-Standardbibliotheks-Funktionen aus
<ctime>völlig aus, wie Swordfish gezeigt hat.Ein Beispiel mit dem boost lib(posix time) wäre auch gut, muss aber nicht sein
Das du überhaupt ein Beispiel bekommst, ist eigentlich eine Ausnahme. So lernst du gar nichts. Du wirst das so direkt herüberkopieren. Das ist absehbar. Jetzt, wo er es schon getan hat um sich zu profilieren ist es sowieso zu spät.
-
Sone schrieb:
z.B. schon später als 18 Uhr und früher als 6 Uhr ist?
Das ist überhaupt nicht möglich. Du meinst wohl die Disjunktion.
Und dafür reichen die C-Standardbibliotheks-Funktionen aus <ctime> völlig aus, wie Swordfish gezeigt hat.
Was ist mit der Zeit zwischen eben 18 Uhr des einen Tages und 6 Uhr des nächsten?
Sone schrieb:
Das du überhaupt ein Beispiel bekommst, ist eigentlich eine Ausnahme. So lernst du gar nichts. Du wirst das so direkt herüberkopieren. Das ist absehbar. Jetzt, wo er es schon getan hat um sich zu profilieren ist es sowieso zu spät.
So merkwürdig ich die Frage fand, so unangemessen finde ich die Antwort.
Vielleicht lernt er ja tatsächlich durch Beispiele besser oder einfacher?
Möglicherweise hatte Swordfish einfach Langeweile und deshalb schnell ein Beispiel zusammengeschrieben?
(Ich weiß nicht, wie lange er dafür brauchte, aber wohl nicht sehr lange (außer er musste noch etwas in der Dokumentation nachschauen, so wie es bei mir oft ist, wenn ich mal schnell ein Beispiel schreiben will; meistens wird es dann nichts mehr))
-
...
-
Swordfish schrieb:
Sone schrieb:
Swordfish: Wieso initialisierst du
raw_time?Weil ich grundsätzlich alles initialisiere.
Keine gute Angewohnheit, finde ich.
-
Sone schrieb:
Das du überhaupt ein Beispiel bekommst, ist eigentlich eine Ausnahme.
Leider!
Sone schrieb:
So lernst du gar nichts. Du wirst das so direkt herüberkopieren. Das ist absehbar. Jetzt, wo er es schon getan hat um sich zu profilieren ist es sowieso zu spät.
Geht's noch?
-
...
-
Swordfish schrieb:
volkard schrieb:
Swordfish schrieb:
Sone schrieb:
Swordfish: Wieso initialisierst du
raw_time?Weil ich grundsätzlich alles initialisiere.
Keine gute Angewohnheit, finde ich.
Was spricht dagegen?
Das kann nur daher rühren, daß Du davon ausgehst, öfter mal eine Initialisierung zu vergessen, weshalb das Programm abstürzen könnte. Um das zu verhindern, initialisierst Du eben mit pseudo-guten Werten? Denke, es wäre wesentlich besser, sich solche Blind-Initialisierungen abzugewöhnen. Du erzeugst nur ein falsches Gefühl der Sicherheit und schneller wird davon auch nichts. Schlangenöl.
#include <ctime> #include <iostream> #include <iomanip> int main() { time_t raw_time = {}; //Hier den Platz weg, sondern zusammenziehen. Damit es wenigstens den //Eindruck hat, Definition und SINNVOLLE Initialisierung wären beisammen. //Damit keiner Code dazwischenschmiert, der dann von falsch initialisiertem //raw_time ausgeht. if( time( &raw_time ) == -1 ) { std::cerr << "time() failed!\n"; return EXIT_FAILURE; } tm *local_time = localtime( &raw_time ); if( local_time->tm_hour >= 18 || ( local_time->tm_hour < 6 && local_time->tm_min <= 59 && local_time->tm_sec <= 59 ) ) { std::cout << std::setfill( '0' ) << std::setw( 2 ) << local_time->tm_hour << ':' << local_time->tm_min << ':' << local_time->tm_sec << '\n'; } }also
#include <ctime> #include <iostream> #include <iomanip> int main() { time_t raw_time = {}; if( time( &raw_time ) == -1 ) { std::cerr << "time() failed!\n"; return EXIT_FAILURE; } tm *local_time = localtime( &raw_time ); if( local_time->tm_hour >= 18 || ( local_time->tm_hour < 6 && local_time->tm_min <= 59 && local_time->tm_sec <= 59 ) ) { std::cout << std::setfill( '0' ) << std::setw( 2 ) << local_time->tm_hour << ':' << local_time->tm_min << ':' << local_time->tm_sec << '\n'; } }Und schon ist die Welt in Ordnung. Naja, beinahe.
Auch
int a; cin>>a; int b; cin>>b;Nach Möglichkeit die Definition so weit verzögern, bis eine sinnvolle Initialisierung möglich ist.
#include <ctime> #include <iostream> #include <iomanip> int main() { time_t raw_time = time(0); if( raw_time == -1 ) { std::cerr << "time() failed!\n"; return EXIT_FAILURE; } tm *local_time = localtime( &raw_time ); if( local_time->tm_hour >= 18 || ( local_time->tm_hour < 6 && local_time->tm_min <= 59 && local_time->tm_sec <= 59 ) ) { std::cout << std::setfill( '0' ) << std::setw( 2 ) << local_time->tm_hour << ':' << local_time->tm_min << ':' << local_time->tm_sec << '\n'; } }
-
Sone schrieb:
So lernst du gar nichts. Du wirst das so direkt herüberkopieren. Das ist absehbar. Jetzt, wo er es schon getan hat um sich zu profilieren ist es sowieso zu spät.
Geht's noch?
Wenn SeppJ das über meine Beispiele damals gesagt hat, dann gilt das genauso für Sworfish!

Sonst ist das ja jarnich fair.volkard schrieb:
Sone schrieb:
Das du überhaupt ein Beispiel bekommst, ist eigentlich eine Ausnahme.
Leider!
Wieso Leider? Was bringt es denn?

Edit: Gut, hier mal meine Sicht der Dinge: Solange man unkommentierte Beispiele, so korrekt sie auch sein mögen, postet, hilft das nicht viel. Mit Kommentaren wäre es wenigstens noch nachvollziehbar - so ist es für einen Laien nicht alles sofort verständlich. Bspw. Wieso Swordfish prüft, ob die Sekunde kleiner gleich 59 ist. Das steht in der Doku, aber nicht hier.
Aber gut, wenn das ja offensichtlich doch etwas gutes ist, dann bitte:#include <iostream> #include "boost/date_time/posix_time/posix_time.hpp" int main() { long now = boost::posix_time::second_clock::local_time().time_of_day().hours(); if( now < 6 || now > 18 ) std::cout << "Schlafenszeit!\n"; }Ohne entsprechende Checks.
-
Sonnenreflektor schrieb:
Sone schrieb:
z.B. schon später als 18 Uhr und früher als 6 Uhr ist?
Das ist überhaupt nicht möglich. Du meinst wohl die Disjunktion.
Und dafür reichen die C-Standardbibliotheks-Funktionen aus <ctime> völlig aus, wie Swordfish gezeigt hat.
Was ist mit der Zeit zwischen eben 18 Uhr des einen Tages und 6 Uhr des nächsten?
Ja, aber wir betrachten nicht zwei Tage sondern einen.
Natürlich hast du aber Recht, genau das meinte er
- trotzdem sollte es heißen, früher als 6 oder später als 18. Denn das ist das, was er prüfen will.
-
...