St_mtimeを文字列形式に変換してJavaレイヤーに渡す必要があります。この例を使用してみます http://www.cplusplus.com/forum/unices/10342/ しかし、コンパイラはエラーを生成します
'long unsigned int *'から 'const time_t * {aka long int const *}'への無効な変換
'tm * localtime(const time_t *)'の引数1を初期化しています[-fpermissive]
私が間違っていること、文字列表示でstat関数を使用してファイルの作成時間を取得する方法。
助けてください。
stat(2) のマニュアルページによると、st_mtime
フィールドはtime_t
です(つまり、 time(7) のマニュアルページを読んだ後、 nixエポック )からの秒数。
現地時間でそのtime_t
をstruct tm
に変換するには localtime(3) が必要です。次に、 strftime(3) に変換するにはchar*
文字列。
したがって、次のようにコーディングできます。
time_t t = mystat.st_mtime;
struct tm lt;
localtime_r(&t, <);
char timbuf[80];
strftime(timbuf, sizeof(timbuf), "%c", <);
次に、おそらくtimbuf
-を使用してstrdup
を使用します。
注意。スレッドに適しているため、localtime_r
を使用しています。
strftime()
を使用してください manページ に例があります:
struct tm *tm;
char buf[200];
/* convert time_t to broken-down time representation */
tm = localtime(&t);
/* format time days.month.year hour:minute:seconds */
strftime(buf, sizeof(buf), "%d.%m.%Y %H:%M:%S", tm);
printf("%s\n", buf);
出力を出力します:
"24.11.2012 17:04:33"
別の方法でこれを達成できます。
tm
構造体へのポインターを宣言します。
_struct tm *tm;
_
適切なサイズの文字配列を宣言します。これには、必要な時間文字列を含めることができます。
_char file_modified_time[100];
_
関数localtime()
を使用して、_st.st_mtime
_(st
はタイプstruct
のstat
、つまり_struct stat st
_)を現地時間に分割します。
_tm = localtime(&st.st_mtim);
_
注:_st_mtime
_は、 stat(2) のマニュアルページにあるマクロ(_#define st_mtime st_mtim.tv_sec
_)です。
sprintf()
を使用して、文字列形式または任意の形式で目的の時刻を取得します。
_sprintf(file_modified_time, "%d_%d.%d.%d_%d:%d:%d", tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec);
_
注意:使用する必要があります
_memset(file_modified_time, '\0', strlen(file_modified_time));
_
sprintf()
の前に、マルチスレッドで発生するゴミのリスクを回避します。