2011-12-28 3 views
8

Come posso scrivere il timestamp leggibile dall'uomo nel kernel di Linux? Penso che do_gettimeofday restituisca l'epoca ma non voglio provare a convertirlo in tempo leggibile. Voglio solo un formato come Hour:Min:Sec:Msec. Grazietimestamp leggibile dall'uomo nel kernel linux

+1

do_gettimeofday è la soluzione migliore. Avrai formattato te stesso. In ogni caso, qual è esattamente il caso d'uso? –

risposta

7

I kernel successivi hanno una funzione time_to_tm per interrompere il periodo storico in formato leggibile dall'uomo.

Ecco un esempio:

struct timeval t; 
struct tm broken; 
do_gettimeofday(&t); 
time_to_tm(t.tv_sec, 0, &broken); 
printk("%d:%d:%d:%ld\n", broken.tm_hour, broken.tm_min, 
         broken.tm_sec, t.tv_usec); 

Ancora una volta, questo è disponibile solo nei kernel successivi. Il secondo parametro time_to_tm è un offset al tempo epoca. Nel mio fuso orario locale è 0, non so quale usare.

1

Anche se non penso ci sia una funzione per questo, puoi farlo abbastanza facilmente se non ti serve il giorno.

struct timeval now; 
unsinged int temp, second, minute, hour; 
do_gettimeofday(&now); 
temp = now.tv_sec; 
second = temp%60; 
temp /= 60; 
minute = temp%60; 
temp /= 60; 
hour = temp%24; 
printf("%02d:%02d:%02d:%06d\n", hour, minute, second, now.tv_usec); 

noti che si ottiene il tempo GMT, non ora locale.