2009-07-02 14 views

Odpowiedz

5

Używa się gettimeofday (2), który jest zdefiniowany w POSIX.1 i BSD.

Zwraca sekundy i mikrosekundę zgodnie z definicją w struct timeval z sys/time.h.

0

Znajdziesz tam przykłady kodów C uzyskiwania czasu i konwertowania go do różnych formatów here.

7

Jest to prosty sposób:

time_t seconds_since_midnight = time(NULL) % 86400; 

Aby uzyskać przybliżone milisekund od północy, należy pomnożyć przez seconds_since_midnight 1000.

Jeśli potrzebujesz więcej rozdzielczość (zastanów się, czy naprawdę), trzeba będzie użyj innej funkcji, takiej jak gettimeofday().

0

Spójrz na gmtime() przekształca się bezpośrednio do uniwersalnego czasu koordynowanego (UTC) ...

8

Jest to precyzyjny sposób:

struct timeval tv; 
int msec = -1; 
if (gettimeofday(&tv, NULL) == 0) 
{ 
    msec = ((tv.tv_sec % 86400) * 1000 + tv.tv_usec/1000); 
} 

To będzie przechowywać w msec liczbę milisekund od północ. (lub -1 jeśli wystąpił błąd podczas pobierania czas.)

Mimo to zwykle zły pomysł, aby przechowywać wartości czasowe w int, mam być trochę cavalier i zakładając int jest co najmniej 32-bitowy i może z łatwością pomieścić zakres (-1) do 86 400 000.

Ale nie wiem, czy to jest warte wysiłku.

+1

Wygląda na to, że coś jest nie tak z twoim kodem, według C, które znam. Może powinieneś wcześniej zadeklarować 'msec', również użyty' else'. – ThoAppelsin

+0

@ThoAppelsin Dobry punkt. Poprawione. Dzięki! – scraimer

Powiązane problemy