Agregar días a la fecha en c ++

Soy nuevo en c ++, así que me pregunto si hay alguna biblioteca que pueda ayudar a lidiar con las fechas con mayor fluidez.

Tengo una tarea bastante sencilla. Tengo una fecha de inicio en diferentes valores y tengo que saber qué fecha será cuando aumente la fecha en un número aleatorio de días.

Lo supuse mktime y time_t los objetos parecen ser útiles con lo que estoy tratando de hacer. Si son la respuesta, ¿alguien podría darme un enlace a una buena guía?

preguntado el 08 de noviembre de 11 a las 14:11

4 Respuestas

respondido 08 nov., 11:18

Un día suele ser 86400 segundos (excepto por segundos intercalares). Puedes agregar eso a un time_t y consigue una nueva time_t etc. Entonces puedes usar mktime & localtime para convertirlo a struct tm que se puede visualizar con strftime y podría analizarse con strptime

respondido 08 nov., 11:18

Bueno, existe el Módulo de impulso de fecha y hora. Si su compilador es lo suficientemente nuevo, existe el C ++ 11 crono espacio de nombres

respondido 08 nov., 11:18

Acabo de escribir mi propia función para agregar días, meses y años a una clase DATE existente. Todavía no pude probarlo, pero tal vez ayude:

bool DATE::add(int Day, int Month, int Year){
int DaysPerMonth[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
this -> Day += Day;
while(this -> Day > DaysPerMonth[ this-> Month ]){
    if((this -> Year % 4 == 0 && this -> Year % 100 != 0) || this -> Year % 400 == 0){
        DaysPerMonth[2] = 29; 
    }
    this -> Day -= DaysPerMonth[ this-> Month ];
    this -> Month++;
    if(this -> Month > 12){
        this -> Month = 1;
        this -> Year++;
    } 
}
this -> Month   = ( this -> Month + (Month % 12));
this -> Year    = ( this -> Year + Year + (Month/12));
if((this -> Year % 4 == 0 && this -> Year % 100 != 0) || this -> Year % 400 == 0){
    DaysPerMonth[2] = 29;   
    // check pathologic case wether date is 1 of March and added Year targets switchyear 
    if( this -> Day == 1 && this -> Month == 3){            
        this -> Day = 29;
        this -> Month = 2;
    }
}
if(this -> Month < 1 || this -> Month > 12 || this -> Day < 1 || this -> Day > DaysPerMonth[this->Month]){  
    valid = false;
    cerr << "something went wrong, calculated Date is: " << this -> Day << "."<< this -> Month << "." << this -> Year << endl << flush;
    return false;
}else{
    return true;
}

}

Respondido el 25 de Septiembre de 12 a las 23:09

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.