2011-12-28 13 views
8

Linuxカーネルで人間が読めるタイムスタンプを書くにはどうすればいいですか?私はdo_gettimeofdayがエポックを返すと思うが、私はそれを読み込み可能な時間に変換しようとは思わない。私はちょうどHour:Min:Sec:Msecのようなフォーマットが欲しいです。 ありがとうLinuxカーネルの人間が読めるタイムスタンプ

+1

do_gettimeofdayが最適です。自分でフォーマットします。とにかく正確なユースケースは何ですか? –

答えて

7

以降のカーネルには、エポック時間を人間が判読可能な形式に改める機能があります(time_to_tm)。

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); 

は再び、これは以降のカーネルでのみ利用可能です:

は、ここでの例です。第2のパラメータtime_to_tmは、エポック時間のオフセットです。私の現地時間は0ですが、どちらを使うべきか分かりません。

1

私はこのための機能はないと思いますが、あなたがその日を必要としない場合は非常に簡単に行うことができます。

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); 

ローカル時間ではなく、GMT時間を取得することに注意してください。

関連する問題