Saltar al contenido

¿Algoritmo para sumar o restar días de una fecha?

Solución:

La forma más fácil es escribir dos funciones, una que convierte el día en un número de días a partir de una fecha de inicio determinada, y luego otra que convierte de nuevo en una fecha. Una vez que la fecha se expresa como un número de días, es trivial agregarle o restarle.

Puede encontrar los algoritmos aquí: http://alcor.concordia.ca/~gpkatch/gdate-algorithm.html

Realmente no necesita un algoritmo como tal (al menos no algo digno de ese nombre), la biblioteca estándar puede hacer la mayor parte del trabajo pesado; Los cálculos del calendario son notoriamente complicados. Siempre que no necesite fechas anteriores a 1900, entonces:

#include <ctime>

// Adjust date by a number of days +/-
void DatePlusDays( struct tm* date, int days )
{
    const time_t ONE_DAY = 24 * 60 * 60 ;

    // Seconds since start of epoch
    time_t date_seconds = mktime( date ) + (days * ONE_DAY) ;

    // Update caller's date
    // Use localtime because mktime converts to UTC so may change date
    *date = *localtime( &date_seconds ) ; ;
}

Uso de ejemplo:

#include <iostream>

int main()
{
    struct tm date = { 0, 0, 12 } ;  // nominal time midday (arbitrary).
    int year = 2010 ;
    int month = 2 ;  // February
    int day = 26 ;   // 26th

    // Set up the date structure
    date.tm_year = year - 1900 ;
    date.tm_mon = month - 1 ;  // note: zero indexed
    date.tm_mday = day ;       // note: not zero indexed

    // Date, less 100 days
    DatePlusDays( &date, -100 ) ; 

    // Show time/date using default formatting
    std::cout << asctime( &date ) << std::endl ;
}

Supongo que esto es para algún tipo de ejercicio, de lo contrario, usaría una clase de tiempo que ya se le proporcionó.

Puede almacenar su tiempo como el número de milisegundos desde una fecha determinada. Y luego puede agregar el valor apropiado y convertirlo a la fecha al llamar a los descriptores de acceso de su clase.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *