1

私は現在、いくつかのCコードに取り組んでおり、人間が読める形式の日付をエポックタイムスタンプ(UNIXタイムスタンプ)に変換しようとしています。ただし、常に負の数を返します。struct tm正しく機能するまで、日付の値を使用してハードコーディングしています。以下はコードです

struct tm t;
time_t t_of_day;
t.tm_year = 2012 - 1970;
t.tm_mon = 9;
t.tm_mday = 24;
t.tm_hour = 11;
t.tm_min = 34;
t.tm_sec = 30;
t.tm_isdst = 1;
t_of_day = mktime(&t);
printf("Epoch time stamp is: %ld\n", t_of_day);

このコードを実行すると、の出力が得られます-858000330

あなたが提供できるどんな助けにも感謝します。

4

3 に答える 3

7

2012 - 1970計算は42になります。1942年は1970年1月1日より前です。ただし、これは通常のmktime()結果であり、タイムスタンプは負になります。

mktimeのマニュアルページから:

tm_year   The number of years since 1900.

年の計算をに変更する2012 - 1900と、問題ないはずです。

于 2012-10-24T10:42:34.047 に答える
2

ここに来る前に、manページを読んでください。

からの逐語的man mktime()

tm構造体のメンバーは次のとおりです。

tm_sec分後の秒数。通常は0〜59の範囲ですが、うるう秒を考慮して最大60秒にすることができます。

tm_min0から59の範囲の1時間後の分数。

tm_hour0から23の範囲の深夜0時を過ぎた時間数。

tm_mday 1〜31の範囲の月の日。

tm_mon1月からの月数。0から11の範囲です。

tm_year1900年からの年数。

tm_wday日曜日からの日数(0から6の範囲)。

tm_yday1月1日からの日数。範囲は0から365です。

tm_isdst指定された時間に夏時間が有効であるかどうかを示すフラグ。この値は、夏時間が有効な場合は正、有効でない場合はゼロ、情報が利用できない場合は負になります。

于 2012-10-24T10:43:54.713 に答える
2

tm_yearは、1970年ではなく、1900年からの年数です。

于 2012-10-24T10:43:56.743 に答える