Entrada: cadenas con fecha y hora opcional. Las diferentes representaciones serían agradables pero necesarias. Las cadenas son suministradas por el usuario y pueden estar mal formadas. Ejemplos:¿Cómo se analiza la fecha/hora de la cadena?
"2004-03-21 12:45:33"
(que consideran este diseño predeterminado)"2004/03/21 12:45:33"
(diseño opcional)"23.09.2004 04:12:21"
(formato alemán, opcional)"2003-02-11"
(tiempo puede faltar)
Salida necesaria: Segundos desde Epoch (1970/01/01 00:00:00) o algún otro punto fijo.
Bonificación: Además, leer el desplazamiento UTC de la hora del sistema local sería genial.
Se supone que la entrada es una hora local en la máquina en cuestión. La salida debe ser UTC. El sistema es solo Linux (se necesitan Debian Lenny y Ubuntu).
He intentado usar boost/date_time
, pero debo admitir que no puedo entender bien la documentación. Las siguientes obras sin la necesidad de conversión del sistema de hora local 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);
creo boost::date_time
pueden proporcionar la UTC es necesario compensar, pero no sabrían.
Creo que tendrá que analizarlos por su cuenta (quizás con espíritu) porque el número de un solo dígito del mes en "2004-3-21" no es analizable por ninguno de los especificadores de formato IO del tiempo de impulso http: //www.boost.org/doc/libs/1_44_0/doc/html/date_time/date_time_io.html#date_time.format_flags – Cubbi
@Cubbi: si ese es el único problema, es mucho más fácil verificarlo e insertar un 0 en la cuerda que para traer espíritu a la imagen. –
@Cubbi - puede manejar formatos de entrada y salida personalizados en 'boost :: date_time' -' boost :: spirit' es overkill aquí –