2009-03-31 3 views
5

Gesamtneuling Frage hier; Ich entschuldige mich im Voraus.Erhalte die aktuelle Stunde in C mit time.h

Angenommen, ich habe einen Daemon in C geschrieben, der sich alle fünf Minuten oder so aufwacht, etwas verarbeitet, wenn sich irgendetwas in seiner Eingabewarteschlange befindet, und dann wieder in den Ruhezustand geht. Nehmen wir nun an, dass es eine Verarbeitung gibt, die es nur nach einer bestimmten (konfigurierbaren) Zeit durchführen muss - beispielsweise 14 Uhr (und vor Mitternacht).

In C, was ist der schnellste, beste Weg, um die aktuelle Uhrzeit in eine int-Variable zu bekommen, so dass es leicht überprüft werden kann - um festzustellen, ob es tatsächlich nach 14 Uhr heute ist?

+0

Ich nehme an, Sie haben einen guten Grund, diese Funktionalität auf eigene Faust zu implementieren, aber nur für den Fall, ich dachte, ich würde darauf hinweisen, dass dies im Grunde, was Cron tut. Könnte Ihre App einfach von Cron aufgerufen werden? (oder geplante Aufgaben auf Windows) – rmeador

+0

Der Daemon hat Verarbeitung, die es jedes Mal tun muss, wenn es aufwacht, es hat nur einige spezielle Verarbeitung, die es erst nach 14 Uhr tut. Ansonsten, ja, ich würde definitiv zustimmen, dass Cron die beste Lösung ist. –

Antwort

17

Ortszeit. Siehe http://linux.die.net/man/3/localtime

struct tm *tm_struct = localtime(time(NULL)); 

int hour = tm_struct->tm_hour; 
+3

time_t Rohzeit; Zeit (& Rohzeit); Struktur tm * tm_struct = lokale Zeit (& rawtime); arbeitete für mich – Belovoj

7
printf("the hour is %d\n", localtime(time(NULL))->tm_hour); 

Dies beruht auf der Tatsache, dass localtime() einen Zeiger auf statische Speicherzurückgibt.

7

Der Anruf localtime(time(NULL)) wird nie funktionieren. Der Rückgabewert von time() ist ein time_t, und das erste Argument von localtime ist ein time_t*. Weder ist die angenommene Antwort, noch ist die mit printf korrekt.

time_t now; 
struct tm *now_tm; 
int hour; 

now = time(NULL); 
now_tm = localtime(&now); 
hour = now_tm->tm_hour; 
+0

Ich erinnere mich, dass der Grund, warum ich die erste Antwort akzeptierte, war, weil es für mich arbeitete. Es könnte am Ende plattformabhängig sein? Es ist 5 Jahre her und eine andere Firma, seit ich den Code angeschaut habe, also kann ich mich nicht erinnern. –