C言語関係掲示板

過去ログ

No.182.日付のファイルへの出力


No.1168

日付のファイルへの出力
投稿者---ヨシオ(2002/03/05 21:34:09)


日付をファイルに書き込む処理をしたいので
System()でdateコマンドを実行しようと思うのですが
dateコマンドの出力結果をファイルに書き込むのにはどのようにすればいいのでしょうか?

よろしくお願いいたします。

No.1171

Re:日付のファイルへの出力
投稿者---ともじ(2002/03/05 23:19:05)


こんばんは。

>日付をファイルに書き込む処理をしたいので
>System()でdateコマンドを実行しようと思うのですが
>dateコマンドの出力結果をファイルに書き込むのにはどのようにすればいいのでしょうか?

dateコマンドをsystem()で実行するよりも、
time()関数で取得した現在時刻をctime()関数で文字列に変換した方が
いいでしょうね。

No.1176

Re:日付のファイルへの出力
投稿者---ヨシオ(2002/03/06 09:33:43)


time()関数で年月日だけを変数として格納するにはどのようにしたらいいのでしょうか?

宜しくお願いいたします。


No.1179

Re:日付のファイルへの出力
投稿者---C職人(2002/03/06 14:13:49)


>time()関数で年月日だけを変数として格納するにはどのようにしたらいいのでしょうか?
>
>宜しくお願いいたします。

#include <stdio.h>
#include <time.h>

int main(void)
{
time_t timer;
struct tm *t_st;
char nengappi[8+1];
char tuki[2+1];
char hi[2+1];
FILE *w_fp;

w_fp=fopen("c:\\myFolder\\date.txt","w");
if(w_fp==NULL){
fprintf(stderr,"ファイルを開くことができませんでした。\n");
return 1;
}

/* 現在時刻の取得 */
time(&timer);

/* 現在時刻を文字列に変換して表示 */
printf("現在時刻: %s", ctime(&timer));

/* 現在時刻を構造体に変換 */
t_st = localtime(&timer);

/*月の編集*/
if(t_st->tm_mon+1 >0 && t_st->tm_mon+1 <10){
sprintf(tuki,"0%d",t_st->tm_mon+1);
}
else{
sprintf(tuki,"%d",t_st->tm_mon+1);
}

/*日の編集*/
if(t_st->tm_mday >0 && t_st->tm_mday <10){
sprintf(hi,"0%d",t_st->tm_mday);
}
else{
sprintf(hi,"%d",t_st->tm_mday);
}

/*年月日の編集(yyyymmdd)*/
sprintf(nengappi,"%d%s%s",t_st->tm_year+1900,tuki,hi);
printf("%s\n",nengappi);

/*ファイルに取得した日付を書き込む*/
fprintf(w_fp,"%s\n",nengappi);

return(0);
}

上記のようにsprintfで編集すればいいのではないでしょうか。
どうでしょうか


No.1180

Re:日付のファイルへの出力
投稿者---ともじ(2002/03/06 14:28:28)


こんにちは。

>time()関数で年月日だけを変数として格納するにはどのようにしたらいいのでしょうか?

年月日だけを取り出すには、localtime関数と、sprintf関数を使って、
time関数で取得した現在時刻を編集すればよいですね。

#include <stdio.h>
#include <time.h>
int main(void)
{
	char tbuf[20];
	time_t timer;
	struct tm *t_st;

	/* 現在時刻の取得 */
	time(&timer);

	/* 現在時刻を構造体に変換 */
	t_st = localtime(&timer);
	/* 年月日の編集 */
	sprintf(tbuf,"%d %d %d",t_st->tm_year+1900,t_st->tm_mon+1,t_st->tm_mday);
	printf("%s\n",tbuf);

	return(0);
}




No.1184

Re:日付のファイルへの出力
投稿者---C職人(2002/03/06 14:55:05)


出力形式が明確に宣言されていないのでなんともいえませんが、
一般的にはyyyymmddと出力すると思います。
なんともいえませが、月、日が0から9のときに0を補ったほうが
よいと思ったのでそうしてみました。

No.1186

Re:日付のファイルへの出力
投稿者---ともじ(2002/03/06 15:45:15)


C職人さん、こんにちは。
いつも書きこみありがとうございます。

>出力形式が明確に宣言されていないのでなんともいえませんが、
>一般的にはyyyymmddと出力すると思います。
>なんともいえませが、月、日が0から9のときに0を補ったほうが
>よいと思ったのでそうしてみました。

はい、ご丁寧な書きこみありがとうございます。
私は結構サラッっと書いてしまうので、書き方が不親切だったりします。
先ほどは、送信してから、C職人さんがもっと丁寧に書いてくださったのに、
気がつきました。
(たぶん、編集中にC職人さんが書きこんでいられたのですね。)
これからも、至らない点など補っていただけると本当にありがたいです。
よろしくお願いいたします。



No.1188

Re:日付のファイルへの出力
投稿者---C職人(2002/03/06 16:05:25)


>C職人さん、こんにちは。
>いつも書きこみありがとうございます。
>
>>出力形式が明確に宣言されていないのでなんともいえませんが、
>>一般的にはyyyymmddと出力すると思います。
>>なんともいえませが、月、日が0から9のときに0を補ったほうが
>>よいと思ったのでそうしてみました。
>
>はい、ご丁寧な書きこみありがとうございます。
>私は結構サラッっと書いてしまうので、書き方が不親切だったりします。
>先ほどは、送信してから、C職人さんがもっと丁寧に書いてくださったのに、
>気がつきました。
>(たぶん、編集中にC職人さんが書きこんでいられたのですね。)
>これからも、至らない点など補っていただけると本当にありがたいです。
>よろしくお願いいたします。
>私もまだまだ未熟者なのでお互いに成長できたらいいですね




No.1191

Re:日付のファイルへの出力
投稿者---かずま(2002/03/06 18:18:12)


> なんともいえませが、月、日が0から9のときに0を補ったほうが
> よいと思ったのでそうしてみました。

それなら、場合分けして、"0%d" と "%d" を使い分けるなんて無駄なことはせずに、
"%02d" を使えばすみます。

sprintf(tbuf, "%d%02d%02d", t_st->tm_year+1900, t_st->tm_mon+1, t_st->tm_mday);


No.1213

Re:日付のファイルへの出力
投稿者---C職人(2002/03/07 14:38:00)


>> なんともいえませが、月、日が0から9のときに0を補ったほうが
>> よいと思ったのでそうしてみました。
>
>それなら、場合分けして、"0%d" と "%d" を使い分けるなんて無駄なことはせずに、
>"%02d" を使えばすみます。
>
>sprintf(tbuf, "%d%02d%02d", t_st->tm_year+1900, t_st->tm_mon+1, t_st->tm_mday);


%02dと言う表現は知りませんでした。
これは勉強になりました。


戻る


「初心者のためのポイント学習C言語」 Last modified:2002.05.14
Copyright(c) 2000-2002 TOMOJI All Rights Reserved