0

関数strptime()を使用して、文字列からstruct tm. しかし、フィールドを確認すると、入力されていないフィールドがいくつかあります。だから私はマニュアルページをチェックしましたが、正しいことをしているように見えるので、何がうまくいかないのか途方に暮れています.

サンプル入力文字列:

Wed, 19 Oct 2005 10:59:00 GMT

strptime 関数:

if(strptime(date, "%a, %d %b %Y %T %Z", &time) != NULL)

%a は曜日、%d は日、%b は月、%Y は年、%T は HH:MM:SS および % であると理解しています。 Z は GMT です。

の出力tm struct

year: 32767; month: 866041216; day: 0;
hour: 3; minute: 0; second: 37941328

出力を生成するコード:

printf("year: %d; month: %d; day: %d;\n",
        time.tm_year, time.tm_mon, time.tm_mday);
printf("hour: %d; minute: %d; second: %d\n",
        time.tm_hour, time.tm_min, time.tm_sec);
printf("week day: %d; year day: %d\n", time.tm_wday, time.tm_yday);

正しい方向へのプッシュは非常に役立ちます。ありがとう!

4

1 に答える 1

1

timeを呼び出す前にstrptime、通常は次のように初期化する必要があります。

memset(&time, 0, sizeof(struct tm));

マニュアルページを引用:

原則として、この関数は tm を初期化せず、指定された値を格納するだけです。これは、呼び出しの前に tm を初期化する必要があることを意味します。詳細は、異なる UNIX システム間で少し異なります。glibc 実装は、年、月、または日のいずれかの要素が変更された場合に tm_wday および tm_yday フィールドを再計算することを除いて、明示的に指定されていないフィールドには触れません。

于 2012-11-17T22:27:44.257 に答える