ctime関数で得られる結果に対して書式を変更するには?

解決


らりばど  2002-04-24 13:44:06  No: 50106  IP: [192.*.*.*]

「らりばど」と申します。

イベントログの内容をCSV形式で画面表示するプログラムを
作成しています。
サンプルソースとして、
http://www.geocities.co.jp/SiliconValley-PaloAlto/5920/api_ReadEventLog.html
を参考にしていますが、日付表示の書式を変更したいのですが
方法がわからず悩んでいます。

開発環境:Windows2000pro(SP2) + VisualC6.0

イベントログ構造体にデータを格納した後、書込み時刻などを
表示する為に、サンプルではctime関数が使われています。

> printf("生成時刻: %s", ctime(&pBuf->TimeGenerated));
> printf("書き込み時刻: %s", ctime(&pBuf->TimeWritten));

画面表示の際の書式を変更すべく、

例1
> strftime(GenTimeStr, 30, "%Y/%m/%d %a %H:%M:%S", ctime(&pBuf->TimeGenerated));
> printf("生成時刻: %s", GenTimeStr);

例2
> strftime(GenTimeStr, 30, "%Y/%m/%d %a %H:%M:%S", &pBuf->TimeGenerated);
> printf("生成時刻: %s", GenTimeStr);

としてみたものの、GenTimeStr変数に格納される値は、およそ日付とは
言い難い値が格納されます。
例)値="0766/71/76 Apr 97:フフフフフフフフフフフフフフ1"など

うまく書式を変更するにはどうすればいいのでしょうか。
よろしくお願いします。

編集 削除
YuO  2002-04-25 02:37:34  No: 50107  IP: [192.*.*.*]

ctimeの引数は,const struct time_t *です。
それに対して,strftimeの最後の引数はconst struct tm *です。
というわけで,gmtimeとかlocaltimeとかを使えばいいでしょう。

編集 削除
らりばど  2002-04-26 11:31:17  No: 50108  IP: [192.*.*.*]

>YuOさん

localtime関数で出来ました。
型まわりのことが良くわかっていないのでちょっと苦労しましたが
何とか希望する値がとれるようになりました。
ありがとうございます。

> strftime(WrtTimeStr, 25, "%Y/%m/%d %a %H:%M:%S", localtime(&pBuf->TimeWritten));
> printf("\"%s\",", WrtTimeStr);

編集 削除