2012-05-07 12 views
7

Tengo una cadena formateada como "2012-03-28T08: 00: 00". quiero obtener año, mes (en formato de cadena), fecha, hora, min, seg y día (en formato de cadena). puede alguien sugerirme la forma más fácil de hacerlo en impulso.cómo obtener boost :: posix_time :: ptime desde cadena formateada

gracias

+0

Está su cadena siempre en el formato ISO lo solicitado acerca de su pregunta o lo necesita para aceptar cualquier formato de secuencia? – tinman

Respuesta

9

Si los métodos from_string() existentes no se ajustan a sus necesidades, entonces puede usar una faceta de entrada de tiempo que le permite personalizar el formato desde el que se analiza la cadena.

En su caso se puede utilizar el formato de cadena extendida ISO manera puede utilizar el código siguiente para analizar sus cadenas:

boost::posix_time::time_input_facet *tif = new boost::posix_time::time_input_facet; 
    tif->set_iso_extended_format(); 
    std::istringstream iss("2012-03-28T08:00:00"); 
    iss.imbue(std::locale(std::locale::classic(), tif)); 
    iss >> abs_time; 
    std::cout << abs_time << std::endl; 
+0

funcionó ... muchas gracias – Dev

+2

Agradable pero ese "nuevo" es feo. Uno puede sortearlo construyendo la faceta así: "boost :: posix_time :: time_input_facet tif (1)". El argumento "1" no significa ningún negocio divertido con la propiedad y la duración de la vida ... –

9

Sin utilizar facetas;

ptime dateTime = boost::date_time::parse_delimited_time<ptime>(string, 'T');

Las dos funciones from*_string tienen límites en lo que se convierten formatos.

  • No acepta 'T': time_from_string(s).
  • No acepta '-': from_iso_string(s).

Ida y vuelta ISO 8601 fecha/hora en boost;

std::string date = to_iso_extended_string(dateTime);

Cuestiones relacionadas