2

あるtime_tのdateコンポーネントと別のtime_tのtimeコンポーネントを結合すると思われる関数を作成しました。

time_t joinDateTime( time_t date, time_t time )
{
    tm tm_date( *gmtime( &date ) ), tm_time( *gmtime( &time ) );

    tm_date.tm_hour = tm_time.tm_hour;
    tm_date.tm_min = tm_time.tm_min;
    tm_date.tm_sec = tm_time.tm_sec;

    return mktime( &tm_date );
}

この関数はタイムゾーン変換を実行しないはずmktime()ですが、指定した時間構造がローカルタイムゾーンにあると想定し、UTC 0に変換します。この関数を変更して、mktime()提供されるタイムゾーン変換を適用しないようにするにはどうすればよいですか。

4

2 に答える 2

2

Atime_tは常にUTC時間です。それが必要な場合は、日付と時刻に参加するためのより直接的な方法があります。測定は秒単位で行われるため、分割して日数を取得し、残りを時間として取ることができます。

time_t joinDateTime( time_t date, time_t time )
{
    time_t days = date / (24*60*60);
    time_t seconds = time % (24*60*60);

    return days*24*60*60 + seconds;
}
于 2012-10-16T21:37:51.457 に答える
0

gmtime

struct tm * gmtime ( const time_t * timer );

time_tをUTC時間としてtmに変換します

gmtimeを使用すると変換が行われます

struct tm * localtime ( const time_t * timer );代わりに使用してください

于 2012-10-16T19:27:14.383 に答える