何らかの「標準」の方法がありますか、それともgregorian::date(1970,1,1)
から減算して直接計算するのが最善ですか?
_time_t
_は、秒単位の時間(通常はエポック時間)を保持するために使用されるタイプです。私はあなたがエポック時間の後にいると推測しています、もしそうなら、あなたがすでに持っている減算を除いて、実際にエポック時間を直接取得することのブーストの方法を認識していません。 _time_duration
_(減算の結果)が得られたら、期間でtotal_seconds()
を呼び出して、_time_t
_に格納できます。
ところで。エポック時間を過ぎている場合は、gettimeofday()
を使用するだけで頭痛を軽減できます。
@icecrimeのメソッドは2回変換するため(ptimeは内部的に線形表現を使用します)、代わりに直接計算を使用することにしました。ここにあります:
_time_t to_time_t(boost::posix_time::ptime t)
{
using namespace boost::posix_time;
ptime Epoch(boost::gregorian::date(1970,1,1));
time_duration::sec_type x = (t - Epoch).total_seconds();
// ... check overflow here ...
return time_t(x);
}
_
編集:私の注意を喚起してくれた@jaawに感謝します。 boost 1.58以降、この関数は_date_time/posix_time/conversion.hpp
_、std::time_t to_time_t(ptime pt)
に含まれています。
念のため、2038年を超える@ybungalobillのメソッドのバリエーションを次に示します。 :)
int64_t rax::ToPosix64(const boost::posix_time::ptime& pt)
{
using namespace boost::posix_time;
static ptime Epoch(boost::gregorian::date(1970, 1, 1));
time_duration diff(pt - Epoch);
return (diff.ticks() / diff.ticks_per_second());
}
これらの2行で実行する必要があります。
tm td_tm = to_tm(pt);
time_t tt = mktime(&td_tm);