2010-01-25 4 views
3

j'ai le temps suivant:Time Zone spécifique Dans boost :: posix_time :: ptime

2010-01-25 03:13:34.384 - GMT Time Zone 
2010-01-25 11:13:34.384 - My Local 

Je souhaite convertir en timestamp en ms. Cependant, depuis que je ne pouvez utiliser que la chaîne de l'heure locale de l'appelant « 2010-01-25 11: 13: 34,384 »

Si je le fais de cette façon:

// ts is "2010-01-25 11:13:34.384" (My Local) 
boost::posix_time::ptime t(boost::posix_time::time_from_string(ts)); 
boost::posix_time::ptime end(boost::gregorian::date(1970,1,1)); 
boost::posix_time::time_duration dur = t - end; 
// epoch is 1264418014384 
// 2010-01-25 11:13:34.384 (GMT) -- But I want 2010-01-25 03:13:34.384 
// 2010-01-25 19:13:34.384 (My Local) -- But I want 2010-01-25 11:13:34.384 
long long epoch = dur.total_milliseconds(); 

Est-il possible de dire stimuler: : posix_time, que la chaîne ts qu'il reçoit appartient à Mon fuseau horaire local?

Répondre

2

J'ai dans mon arbre local (préfixe d'espace de noms omis):

/// wall-clock translation to UTC 
    const ptime from_wall_clock(const ptime& value, 
           const time_zone_ptr& from) 
    { 
     assert(from.get()); 

     // interpret as local time 
     const local_date_time from_local(value.date(), 
      value.time_of_day(), from, 
      local_date_time::NOT_DATE_TIME_ON_ERROR); 

     // get UTC 
     return from_local.utc_time(); 
    } 
+2

Puis-je savoir comment voulez-vous obtenir le fuseau horaire actuel? –

+0

Vous le conservez dans la variable d'environnement TZ. –

Questions connexes