2008-11-21 12 views
17

Sé que esto puede ser simple pero al ser C++ lo dudo. ¿Cómo convierto una cadena en el formato 01/01/2008 en una fecha para poder manipularla? Me complace dividir la cadena en los componentes del año del mes y mes. También estoy feliz si la solución es solo Windows.Convierta una cadena a una fecha en C++

Respuesta

14
#include <time.h> 
char *strptime(const char *buf, const char *format, struct tm *tm); 
9

Me di cuenta sin usar strptime.

Romper la fecha en sus componentes es decir, día, mes, año, entonces:

struct tm tm; 
time_t rawtime; 
time (&rawtime); 
tm = *localtime (&rawtime); 
tm.tm_year = year - 1900; 
tm.tm_mon = month - 1; 
tm.tm_mday = day; 
mktime(&tm); 

tm ahora se puede convertir en un time_t y manipular.

2

Para cualquiera que esté buscando strptime() para Windows, requiere que la fuente de la función misma funcione. El último código de NetBSD no se transfiere fácilmente a Windows, desafortunadamente.

Yo mismo he utilizado la implementación here (strptime.h y strptime.c).

Otra pieza útil de código se puede encontrar here. Esto viene originalmente de Google Codesearch, que ya no existe.

Espero que esto ahorre mucha búsqueda, ya que me tomó bastante tiempo encontrar esto (y la mayoría de las veces terminé en esta pregunta).

1
#include <time.h> 
#include <iostream> 
#include <sstream> 
#include <algorithm> 

using namespace std; 

int main() 
{ 
    time_t rawtime; 
    struct tm * timeinfo; 
    int year, month ,day; 
    char str[256]; 

    cout << "Inter date: " << endl; 
    cin.getline(str,sizeof(str)); 

    replace(str, str+strlen(str), '/', ' '); 
    istringstream(str) >> day >> month >> year; 

    time (&rawtime); 
    timeinfo = localtime (&rawtime); 
    timeinfo->tm_year = year - 1900; 
    timeinfo->tm_mon = month - 1; 
    timeinfo->tm_mday = day; 
    mktime (timeinfo); 

    strftime (str, sizeof(str), "%A", timeinfo); 
    cout << str << endl; 
    system("pause"); 
    return 0; 
} 
+0

Funciona bien ... Con solo un poco de modificación, esta debería ser la mejor respuesta – Everyone

0

Puede utilizar la biblioteca de impulso (multiplataforma)

#include <stdio.h> 
#include "boost/date_time/posix_time/posix_time.hpp" 

int main() 
{  
std::string strTime = "2007-04-11 06:18:29.000"; 
std::tm tmTime = boost::posix_time::to_tm(boost::posix_time::time_from_string(strTime)); 
return 0; 
} 

Sin embargo, el formato debe ser como se ha mencionado :)

1

¿Por qué no ir a por una solución más sencilla utilizando impulso

using namespace boost::gregorian; 
using namespace boost::posix_time;  
ptime pt = time_from_string("20150917"); 
Cuestiones relacionadas