Comme la méthode de @icecrime convertit deux fois (ptime utilise la représentation linéaire en interne), j'ai décidé d'utiliser le calcul direct à la place. Le voici :
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);
}
EDITAR: Merci @jaaw d'avoir attiré mon attention sur ce point. Depuis boost 1.58 cette fonction est incluse dans date_time/posix_time/conversion.hpp
, std::time_t to_time_t(ptime pt)
.
4 votes
Juste une idée ; j'utilise boost::posix_time::from_time_t(0) au lieu d'un temps explicite dans le calendrier grégorien, pour obtenir un point de référence qui s'ajustera automatiquement à l'époque du système compilé.
0 votes
@Rawler, c'est probablement beaucoup mieux -- j'ai découvert que l'époque réelle est apparemment 2000ns avant ce qui est représenté par
gregorian::date(1970,1,1)
.1 votes
@BrianCain D'où vient l'idée de 2000ns avant le fameux timestamp epoch ? D'aussi loin que je me souvienne et que j'ai lu, j'ai toujours entendu dire que epoch était 1970-01-01 00:00:00.0 UTC.