2010-09-07 3 views
3

J'ai une chaîne de vecteur de dates dans le de « dd-mmm-yyyy » Ainsi, par exemple la date d'aujourd'hui serait:C de format de date boost

std::string today("07-Sep-2010"); 

Je voudrais utiliser la classe date stimuler mais de créer une date objet le constructeur pour ce jour doit être appelée comme suit:

date test(2010,Sep,07); 

est-il un moyen facile/élégant de passer les dates dans le format « dd-mmm-aaaa »? Ma première pensée a été d'utiliser substr, puis de le lancer? Mais j'ai lu qu'il y a aussi la possibilité d'utiliser 'facettes date'?

Merci!

Répondre

2

Il y a un analyseur builtin pour cette forme de date Boost lui-même, consultez la documentation ici:

http://www.boost.org/doc/libs/1_44_0/doc/html/date_time/date_time_io.html#date_time.io_objects

date_type parse_date (...) Paramètres: entrée STRING_TYPE format STRING_TYPE special_values_parser Analyser une date à partir de l'entrée donnée en utilisant le format donné.

string inp("2005-Apr-15"); 
string format("%Y-%b-%d"); 
date d; 
d = parser.parse_date(inp, 
         format, 
         svp); 
// d == 2005-Apr-15 

avec inp ajusté pour vos besoins.

+2

Que représente le troisième argument 'svp'. Aussi l'appel devrait-il être format_date_parser.parse_date (inp, format, svp) ?? – Wawel100

3
include "boost/date_time/gregorian/parsers.hpp" 
date test = boost::gregorian::from_us_string("07-Sep-2010") 
+0

Merci! Bien qu'il devrait être from_uk_string: // De la chaîne de date délimitée où avec ordre jour-mois-année par exemple: 25-1-2002 ou 25-Jan-2003 (le nom du mois complet est également accepté). date from_uk_string (std :: chaîne s); – Wawel100

+0

Je reçois un certain nombre d'avertissements me disant: "Appel de fonction avec des paramètres qui peuvent être dangereux" est-il possible d'éviter cela? – Wawel100

+0

L'avertissement est pour certaines choses internes dans la bibliothèque # pragma warning (disable: 4996) – adrianm