2011-08-05 3 views
4

Je cherche le boost::posix_time::time_input_facet qui me permettra d'analyser des millisecondes. Il ne semble pas être le même que celui des microsecondes de mise en forme qui est "%f"Analyser les microsecondes avec boost

Donc, si je 2011-12-11 08:29:53.123000, je voudrais avoir la mise en forme à droite pour l'analyser, quelque chose comme ça "%Y-%m-%d %H:%M:%S".

+0

* milli * secondes devraient être * micro * secondes – ymett

+0

quel est l'objectif? juste pour obtenir les millisecondes/microsecondes d'une chaîne dans le format ci-dessus ou autre chose? – murrekatt

+0

Le but est d'avoir les informations ms/us pour que je puisse trier les informations en fonction de leur horodatage et ensuite les afficher plus précisément. – Arthur

Répondre

3

Si vous avez une chaîne de date/heure, vous pouvez convertir en un objet ptime comme ceci:

using boost::posix_time; 
ptime t = time_from_string(datetimeString); 

Avoir ce que vous pouvez facilement mettre la main sur la TIME_DURATION qui contient les fractions de seconde.

time_duration td = t.time_of_day(); 
long fs = td.fractional_seconds(); 

Vous pouvez également obtenir les millisecondes totales ou microsecondes comme ceci:

long ms = td.total_milliseconds(); 
long us = td.total_microseconds(); 

Plus d'informations sur ce qui peut être fait dans le documentation.

MISE À JOUR

Si le format d'entrée peut être un autre, de sorte que vous voulez utiliser le time_input_facet vous pouvez vérifier le format approprié pour time_facet.hpp. Voici ce que vous voulez sans doute choisir parmi:

static const char_type fractional_seconds_format[3];    // f                                 
    static const char_type fractional_seconds_or_none_format[3];  // F                                 
    static const char_type seconds_with_fractional_seconds_format[3]; // s 

MAJ2

En time_facet.hpp (Boost 1,45) Je vois ce qui suit lors de l'analyse:

case 'f': 
{ 
    // check for decimal, check special_values if missing                                  
    if(*sitr == '.') { 
     ++sitr; 
     parse_frac_type(sitr, stream_end, frac); 
     ... 

Je ne vois pas pourquoi cela nécessiterait tout sauf un point entre les secondes et les secondes fractionnaires. Peut-être que vous utilisez une autre version de Boost?

+0

Cela fonctionne en effet, mais si j'utilise une forme de mise en forme différente de ma date, je ne suis pas sûr que cela fonctionnera toujours. Je cherche l'étiquette pour millisecondes ou microsecondes à ajouter à% Y-% m-% d% H:% M:% S'. Je pensais que c'était '% 3N' mais ça ne fonctionnait pas – Arthur

+1

'% Y-% m-% d% H:% M:% s' fonctionne alors. Aussi c'est un peu bizarre parce que la facette d'analyse est '% Y-% m-% d% H:% M:% S% f', mais la mise en forme est'% Y-% m-% d% H:% M :% S.% f' (notez le '.' avant'% f') – Arthur

+0

Quelle version de boost utilisez-vous? En 1.45 j'ai actuellement voir la facette d'entrée vérifiant. (point) avant d'analyser les fractions de secondes. – murrekatt

Questions connexes