• ベストアンサー

ファイル情報の「月」の値を整数値で取得するには?

こんにちは。私は30代の男性です。 下記のサイトに載っていたコーディングなのですが、 http://okuyama.mt.tama.hosei.ac.jp/unix/C/slide93-1.html 「ctime(&filestat.st_mtime)」で取得した「Sat Apr 5」の「月」の値を整数で取得する方法を 考えています(例えば、「Sat 4 5」という感じで)。 何かいい方法はないでしょうか?アドバイスを頂けるとありがたいです。 よろしくお願いします。 #include <sys/types.h> /* stat(), struct stat */ #include <sys/stat.h> /* stat(), struct stat */ #include <stdio.h> /* fprintf(), printf() */ #include <errno.h> /* errno */ #include <string.h> /* strerror() */ #include <stdlib.h> /* exit() */ #include <time.h> /* time_t, ctime() */ int main(void) { struct stat filestat; char path[] = "/path/to/file"; time_t dtime; if(stat(path, &filestat) == -1) { fprintf(stderr, "* Error (%d) [stat: %s]\n", errno, strerror(errno)); exit(errno); } printf("Size: %ld\n", (long)filestat.st_size); printf("Last accessed: %ld, %s", filestat.st_atime, ctime(&filestat.st_atime)); printf("Last modified: %ld, %s", filestat.st_mtime, ctime(&filestat.st_mtime)); dtime = filestat.st_atime - filestat.st_mtime; printf("%ld\n", dtime); exit(0); } 実行例です。 Size: 86555 Last accessed: 1049485323, Sat Apr 5 04:42:03 2003 Last modified: 1049428803, Fri Apr 4 13:00:03 2003 56520

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

  • ベストアンサー
  • DT200
  • ベストアンサー率38% (63/164)
回答No.2

ctime() を以下の new_ctime() に置き換えれば期待している文字列が出力される筈です。 char *new_ctime( time_t *tim ) { static char *week[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; static char buf[ 32 ]; struct tm *lt; lt = localtime( tim ); snprintf( buf, 31, "%s %d %d %02d:%02d:%02d %4d", week[ lt->tm_wday ], /* 曜日 */ lt->tm_mon + 1, /* 月 */ lt->tm_mday, /* 日 */ lt->tm_hour, /* 時間 */ lt->tm_min, /* 分 */ lt->tm_sec, /* 秒 */ lt->tm_year + 1900 ); /* 年 */ return buf; }

DT50
質問者

お礼

返事が遅くなって申し訳ありません。 ご回答ありがとうございました。 参考にさせて頂きます。

その他の回答 (1)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

localtimeやgmtimeを使ってtime_t型(st_atimeやst_mtime)をtm構造体に変換すれば tm構造体のメンバから月を取得できます。 http://www9.plala.or.jp/sgwr-t/lib/localtime.html http://www9.plala.or.jp/sgwr-t/lib/gmtime.html

DT50
質問者

お礼

返事が遅くなって申し訳ありません。 ご回答ありがとうございました。 参考にさせて頂きます。