0

これは、文字列または文字として入力された時間を hh:mm:ss 形式に出力するために作成した短いコードです。コンパイル エラーはありませんが、ガベージ値が返されます。どうしたの? 注:日/月/年を印刷したくありません。

# include<iostream>
# include<ctime>
using namespace std;

int main(){

        const char *time_details = "15:34:12";
        struct tm tm;
        strptime(time_details, "%H:%M:%S", &tm);
        time_t t = mktime(&tm);
        cout << t  << endl;


}
4

1 に答える 1

1

のマニュアルページからstrptime

結果の struct tm を完全に指定するのに十分な変換指定がフォーマット文字列に含まれていない場合、tm の指定されていないメンバーはそのまま残ります。

これらの他のメンバーを設定するか、設定したメンバーのみを使用する必要があります。

更新
ここでのもう 1 つの問題は、の使用ですmktime。その機能の OpenGroup の説明から、

エポックからの時間を表すことができない場合、関数は値 (time_t)-1 を返します。

単純に構造をゼロにするtmと、Unix 時間形式 (1970 年 1 月 1 日 00Z からの秒数) で表現できない時間が作成されます。少なくとも、年と日をゼロ以外の値に設定する必要があります。

于 2012-07-02T14:31:26.123 に答える