• ベストアンサー

C言語 ミリ秒を日付に変換には

初心者です orz ただいまC言語勉強中です。(仕事で必要になりそう・・・) やりたいことは、タイトルの通り 「C言語 ミリ秒を日付に変換」です。 1298616934703→yyyyMMddhhmmddssSSS ↑こういう感じのことがしたいです! ログにミリ秒で吐き出された時間から日付を求めたいのですが、 やり方が、いまいちわかりません(泣) どなたか参考サイトや変換方法をご教授願えると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.2

その「ミリ秒で吐き出された時間」という数値が、 単純にエポック秒を1000倍したものだったら、 1000で割った商と余りでに「秒単位の数値(エポック秒)」と「ミリ秒部分」に分けてから、 エポック秒を年月日時分秒に変換するだけでしょう。 ---ここから--- #include <stdio.h> #include <time.h> void conv_time(char *dst, long long t) { time_t clock = t / 1000LL; int millisec = t % 1000LL; struct tm *local = localtime(&clock); sprintf(dst, "%04d%02d%02d%02d%02d%02d%03d", local->tm_year + 1900, local->tm_mon+1, local->tm_mday, local->tm_hour, local->tm_min, local->tm_sec, millisec); } int main(int argc, char *argv[]) { long long t = 1298616934703LL; char s[18]; conv_time(s, t); printf("%lld -> %s\n", t, s); } ---ここまで---

ikechanman
質問者

お礼

ほうっ!! できました! Javaなら簡単にできるんですけど、 Cだとこんなに難しいとは(難しいと思っているのは僕だけ・・・?) 回答ありがとうございました(^q^)/

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

C標準関数では、time_tは秒単位だったはず。 linuxなら http://archive.linux.or.jp/JM/html/LDP_man-pages/man2/gettimeofday.2.html とか http://archive.linux.or.jp/JM/html/LDP_man-pages/man2/clock_gettime.2.html とかですね。 フォーマットを合せたかったら、printf系で。

ikechanman
質問者

お礼

ちゃんと細かいフォーマット指定もできるんですね~ ありがとうございます、勉強になりました!

すると、全ての回答が全文表示されます。
  • papapa0427
  • ベストアンサー率25% (371/1472)
回答No.1

過去にこういう質問がありました。過去に同様の質問があったかどうか、確認しましょうね。 http://okwave.jp/qa/q949646.html

ikechanman
質問者

お礼

ありがとうございます! やりたいことができました!

ikechanman
質問者

補足

おわーすみません。。。 参考サイト内で ------------------------ CTime timeNow = CTime::GetCurrentTime(); CString sTime = timeNow.Format("%Y%m%d%H%M%S"); ------------------------ と、あると思うのですが、環境がLinuxのため使えなさそうです。。。 (説明が足りませんでした) それとも、 --------------------------------------- time_t timer; time(&timer);/* 現在の時刻を取得 */ struct tm *local; local =localtime(&timer);/* 地方時の構造体に変換 */ CString time; //CString用の時間 time.Format("%4d%02d%02d%02d%02d%02d" ,local->tm_year + 1900,/* 年 */ local->tm_mon+1,/*月は0から始まるので1を+*/ local->tm_mday,/* 日 */ local->tm_hour,/* 時 */ local->tm_min,/* 分 */ local->tm_sec);/* 秒 */ --------------------------------------- ↑のtimerに取得したミリ秒を格納して、取得する方法ってことだったりします? 見当違いなこと言ってたらすみません orz 回答よろしくお願いいたします。

すると、全ての回答が全文表示されます。

関連するQ&A