Ingresso: stringhe con data e ora facoltativa. Rappresentazioni diverse sarebbero belle ma necessarie. Le stringhe sono fornite dall'utente e possono essere malformate. Esempi:Come analizzare data/ora dalla stringa?
"2004-03-21 12:45:33"
(considero questo il layout di default)"2004/03/21 12:45:33"
(il layout optional)"23.09.2004 04:12:21"
(formato tedesco, opzionale)"2003-02-11"
(tempo può mancare)
Uscita richiesta: secondi da Epoch (1970/01/01 00:00:00) o qualche altro punto fisso.
Bonus: Inoltre, la lettura dell'ora UTC dell'ora del sistema locale sarebbe ottima.
Si presuppone che l'ingresso sia un orario locale sulla macchina in questione. L'output deve essere UTC. Il sistema è solo Linux (sono necessari Debian Lenny e Ubuntu).
Ho provato a utilizzare boost/date_time
, ma devo ammettere che non riesco a comprendere la documentazione. Le seguenti opere senza la conversione necessaria dal sistema ora locale a 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);
penso boost::date_time
in grado di fornire l'offset UTC necessario, ma non saprei come fare.
Credo che dovrete analizzarli da soli (forse con spirito) perché il numero del mese a una cifra in "2004-3-21" non è analizzabile da nessuno degli indicatori di formato I/O del boost time http: //www.boost.org/doc/libs/1_44_0/doc/html/date_time/date_time_io.html#date_time.format_flags – Cubbi
@Cubbi: se questo è l'unico problema, è molto più facile controllarlo e inserire uno 0 in la stringa che portare lo spirito nella foto. –
@Cubbi - puoi gestire i formati di input e output personalizzati in 'boost :: date_time' -' boost :: spirit' è eccessivo qui –