Entrée: chaînes avec date et heure optionnelle. Différentes représentations seraient bien mais nécessaires. Les chaînes sont fournies par l'utilisateur et peuvent être malformées. Exemples:Comment analyser la date/heure d'une chaîne?
"2004-03-21 12:45:33"
(je considère ce la mise en page par défaut)"2004/03/21 12:45:33"
(mise en page en option)"23.09.2004 04:12:21"
(format allemand, en option)"2003-02-11"
(temps peut manquer)
Sortie nécessaire: secondes depuis l'époque (1970/01/01 00:00:00) ou un autre point fixe.
Bonus: De plus, lire le décalage UTC de l'heure système locale serait super.
L'entrée est supposée être une heure locale sur la machine en question. La sortie doit être UTC. Le système est Linux seulement (Debian Lenny et Ubuntu sont nécessaires).
J'ai essayé d'utiliser boost/date_time
, mais je dois admettre que je ne peux pas faire le tour de la documentation. Les travaux suivants sans la conversion nécessaire de l'heure locale du système à UTC:
std::string date = "2000-01-01";
boost::posix_time::ptime ptimedate = boost::posix_time::time_from_string(date);
ptimedate += boost::posix_time::hours(Hardcoded_UTC_Offset);// where to get from?
struct tm = boost::posix_time::to_tm(ptimedate);
int64_t ticks = mktime(&mTmTime);
Je pense que boost::date_time
peut fournir l'UTC nécessaire décalage, mais je ne sais pas comment.
Je crois que vous devrez les analyser vous-même (peut-être avec l'esprit) parce que le nombre de mois à un chiffre dans "2004-3-21" n'est pas analysable par l'un des spécificateurs de format IO de temps de boost http: //www.boost.org/doc/libs/1_44_0/doc/html/date_time/date_time_io.html#date_time.format_flags – Cubbi
@Cubbi: si c'est le seul problème, il est beaucoup plus facile de vérifier cela et d'insérer un 0 dans la chaîne que d'apporter l'esprit dans l'image. –
@Cubbi - vous pouvez gérer les formats d'entrée et de sortie personnalisés dans boost - date_time' - 'boost :: spirit' est trop grand ici –