「標準的な」方法はありますか、または私ができる最善の方法は、から減算して直接計算することgregorian::date(1970,1,1)
ですか?
質問する
34968 次
5 に答える
37
@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。ブースト 1.58 以降、この機能は に含まれていdate_time/posix_time/conversion.hpp
ますstd::time_t to_time_t(ptime pt)
。
于 2010-12-16T15:18:46.233 に答える
16
time_t
時間を秒単位で保持するために使用される型です (通常はエポック時間)。私はあなたがエポック時間を過ぎていると推測しています。そうであれば、あなたがすでに持っている減算を除いて、実際にエポック時間を直接取得する方法を知りません。time_duration
(減算の結果) が得られたら、期間を呼び出してtotal_seconds()
、それを に格納できますtime_t
。
ところで。エポックタイムを過ぎている場合は、簡単に使用gettimeofday()
して頭痛を軽減できます!
于 2010-12-16T14:26:56.167 に答える
15
念のため、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());
}
于 2011-07-27T19:05:59.017 に答える
2
これらの2行でそれを行う必要があります。
tm td_tm = to_tm(pt);
time_t tt = mktime(&td_tm);
于 2012-04-26T21:47:40.807 に答える