PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Stunde und minute Eruieren



peschmae
01-05-2002, 11:06
bitte lyncht mich nicht gleich!

ich möchte ganz simpel die aktuelle Uhrzeit (_nicht_ sekunden ab 1.1.1970) herausfinden. Im Lin/Unix systemprogrammierung - buch stehen einige interessante Ansätze doch funktionen wie strftime oder so führen bei mir immer zu einem
nicht näher bestimmbaren segmentation fault.

Kann mir jemand ganz nett ein kleines stück code schreiben an dessen ende ich
stunde und minute in je einer int zahl habe?

mfg

peschmä

anda_skoa
01-05-2002, 15:04
Das geht so:



#include <time.h>
#include <stdio.h>

int main(int argc, char* args[])
{
struct tm *tmTime;
time_t sysTime = time(0);
if (sysTime == -1)
return -1;

tmTime = localtime(&sysTime);
printf("Es ist %d:%d\n", tmTime->tm_hour, tmTime->tm_min);

return 0;
}


Statt localtime kannst du zB auch gmtime benutzen. Das gibt die Zeit in UTC Zeit umgewandelt.

struct tm hat noch mehr Felder (Datum, Wochentag, etc).

Siehe dazu die man Page von localtime.

Ciao,
_

peschmae
02-05-2002, 10:29
thanks,

ich probiers mal aus. ...

ich glaub mein code war ganz ähnlich, aber irgendwas streikte

mfg peschmä

peschmae
03-05-2002, 10:57
super!

gibts eine einfache methode mit der ich printf dazu bringe die zahl immer zweistellig anzuzeigen, d.h 07 statt 7?
(in meiner referenz steht nichts davon)

falls nicht ist das auch nicht schlimm, dann mach ich einfach eine
if (tmTime->tm_hour < 10) - abfrage, aber vielleicht gibts da auch eine
elegantere lösung!

anda_skoa
03-05-2002, 15:11
Ja gibt es:

printf("%02d", 7);

ergibt 07

Generell:
% Stellenanzahl Typ
Wenn eine 0 for Stellenanzhl steht, weir mit Nullen augefüllt.

Ciao,
_

BigOne
05-05-2002, 10:00
Kommt man irgendwie an die Zeit in 1/100 Sekunden seit Programmstart ran? Oder auch seit irgendeinem anderen Datum, wie z.B. 1970. Ist eigendlich egal.

anda_skoa
05-05-2002, 11:05
ja, sollte mit gettimeofday gehen.
Die man page dazu sagt, dass diie struct so aussieht:



struct timeval {
long tv_sec; /* seconds */
long tv_usec; /* microseconds */
};


wobei tv_usec die Mikrosekunden seit dem letzten tv_sc sind.

Wie schon gesagt:
#> man gettimeofday
:D

Könnte allerdings sein, dass der usec Wert in 10er Schritten erhöht wird.
Unter x86 ist soweit ich weiß der Tick alle 10 Mikrosekunden.
Wenn deine Anforderungen aber eh 10 Millisekunden Auflösung ist, dann bist eh noch 3 Zehnerpotenzen über dem Limit ;)

Ciao,
_

BigOne
06-05-2002, 14:34
Wieso, was ist denn eine Microsekunde?

peschmae
06-05-2002, 15:12
das hat anda_skoa doch eben gerade erst erklärt!?

im übrigen: thanks für den printf - hinweis anda_skoa!

anda_skoa
06-05-2002, 17:27
Original geschrieben von BigOne
Wieso, was ist denn eine Microsekunde?

Eine ziemlich kurze Zeit :P

10 hoch -6 Sekunden oder auch 0.000001 Sekunden oder auch eine millionstel Sekunde.
Oder etwa 1000 Lichtfuß :D

Ciao,
_