私はboost::posix_time::ptime
オブジェクト(Boost v1.60)にシステムのタイムゾーンに日付と時刻の情報があります。これをUTCのUNIXタイムスタンプに変換する必要があります。現地時間からUTCにブーストptimeを変換する
time_t convertLocalPtimeToTimestamp(const boost::posix_time::ptime& pt)
{
using namespace boost::local_time;
static const time_t t_null = 0;
static struct tm* tm_local = localtime(&t_null);
static time_zone_ptr zone(new posix_time_zone(tm_local->tm_zone));
LOG(debug) << "Zone " << zone->to_posix_string();
local_date_time az(pt.date(), pt.time_of_day(), zone, local_date_time::EXCEPTION_ON_ERROR);
LOG(debug) << "local_date_time: " << az;
LOG(debug) << "local_time: " << az.local_time();
LOG(debug) << "utc_time: " << az.utc_time();
struct tm t = to_tm(az);
time_t ts = mktime(&t);
return ts;
}
私の場合(ヨーロッパ/マドリッド)での結果は次のとおりです。
Zone CET+00
local_date_time: 2016-Oct-05 17:36:27.701162 CET
local_time: 2016-Oct-05 17:36:27.701162
utc_time: 2016-Oct-05 17:36:27.701162
1475685387
様々なエラーは、この結果であります。
- タイムゾーンは、夏時間として検出する必要があります(CEST +0200)CET(+0100)
- DSTの検出がなくても、utc_timeはlocal_timeと異なる必要があります。
- 最後に、タイムスタンプは現地時間ではなく、UTC時間を表す必要があります。
助けていただければ幸いです。このfree, open source libraryから
これでブーストが悪臭を放つ。あなたはhttps://github.com/HowardHinnant/dateを考えました –