• 締切済み

ユニックス時間(秒)を普通の日付時間(時:分:秒)に直すにはどうすればいいでしょうか。

こんにちわ。質問させて頂きます。 C言語で、pcap.hによってキャプチャされたパケットのタイムスタンプ(秒)を、標準時間と申しますか、時:分:秒に直したいと考えています。 時間変換の関数で、ctime,asctime,localtime等があるのは分かっているので、localtime関数を使おうと思っているのですが、使ってみたところポインタのタイプが違うのでエラーが出てしまいます。 具体的には、 方法(1):time_t変数に代入してやってみる struct tm *t_st; time_t timer; timer = header->ts; t_st = localtime (&timer); 方法(2):localtime関数に直接放り込む t_st = localtime (&header->ts); 等を試してみたのですが当然アウトでした。 パケットヘッダの中の時間を表すheader->tsをどうにかlocaltime関数で使いたいと考えています。 これを解決する良い方法はあるでしょうか。 ご存知であればご教授いただけないでしょうか。どうぞよろしくお願いします。

みんなの回答

  • eroermine
  • ベストアンサー率18% (83/444)
回答No.2

time_t timer; timer = header->ts; t_st = localtime (&timer); これでok t_st->tm_mday に日付が入ってます 駄目だったとしたらこの部分か timer = header->ts; パケットから持ってきたままだと ASCIIの可能性も

arlstumia
質問者

お礼

ご回答有難う御座いました。 timer = header->ts.t_sec とすると嘘のようにすんなり行くことが出来ました。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

こういう質問をする場合、headerの型がなんであるかを示してください。 今回はどうやらstruct pcap_pkthdrらしいという推測はつきますが。 で、header->tsの型はstruct timevalでlocaltimeが引数に要求するのはconst time_t *なので当然このままでは入れられません。 struct timevalの定義を見ればどうすればいいかの答えはわかるはずです。

関連するQ&A

専門家に質問してみよう