Fecha después de agregar el número dado de días a la fecha dada

Dada una fecha y un entero positivo x . La tarea es encontrar la fecha después de agregar x días a la fecha dada

Ejemplos: 

Input : d1 = 14, m1 = 5, y1 = 2017
        Days to be added x = 10
Output : d2 = 24, m2 = 5, y2 = 2017

Input : d1 = 14, m1 = 3, y1 = 2015
        Days to be added x = 466
Output : d2 = 14, m2 = 3, y2 = 2016
 

1) Sea la fecha dada d1, m1 e y1. Encuentre la compensación (número de días transcurridos desde el comienzo hasta la fecha dada) de un año determinado (consulte offsetDays() a continuación) 
2) Deje que la compensación encontrada en el paso anterior sea offset1. Encuentre el año de resultado y2 y la compensación del año de resultado compensación2 (Consulte el código resaltado a continuación) 
3) Encuentre los días y meses de la compensación2 y y2. (Consulte revoffsetDays() a continuación).

A continuación se muestra la implementación de los pasos anteriores. 

C++

// C++ program to find date after adding
// given number of days.
#include<bits/stdc++.h>
using namespace std;
 
// Return if year is leap year or not.
bool isLeap(int y)
{
    if (y%100 != 0 && y%4 == 0 || y %400 == 0)
        return true;
 
    return false;
}
 
// Given a date, returns number of days elapsed
// from the  beginning of the current year (1st
// jan).
int offsetDays(int d, int m, int y)
{
    int offset = d;
 
    switch (m - 1)
    {
    case 11:
        offset += 30;
    case 10:
        offset += 31;
    case 9:
        offset += 30;
    case 8:
        offset += 31;
    case 7:
        offset += 31;
    case 6:
        offset += 30;
    case 5:
        offset += 31;
    case 4:
        offset += 30;
    case 3:
        offset += 31;
    case 2:
        offset += 28;
    case 1:
        offset += 31;
    }
 
    if (isLeap(y) && m > 2)
        offset += 1;
 
    return offset;
}
 
// Given a year and days elapsed in it, finds
// date by storing results in d and m.
void revoffsetDays(int offset, int y, int *d, int *m)
{
    int month[13] = { 0, 31, 28, 31, 30, 31, 30,
                      31, 31, 30, 31, 30, 31 };
 
    if (isLeap(y))
        month[2] = 29;
 
    int i;
    for (i = 1; i <= 12; i++)
    {
        if (offset <= month[i])
            break;
        offset = offset - month[i];
    }
 
    *d = offset;
    *m = i;
}
 
// Add x days to the given date.
void addDays(int d1, int m1, int y1, int x)
{
    int offset1 = offsetDays(d1, m1, y1);
    int remDays = isLeap(y1)?(366-offset1):(365-offset1);
 
    // y2 is going to store result year and
    // offset2 is going to store offset days
    // in result year.
    int y2, offset2;
    if (x <= remDays)
    {
        y2 = y1;
        offset2 = offset1 + x;
    }
 
    else
    {
        // x may store thousands of days.
        // We find correct year and offset
        // in the year.
        x -= remDays;
        y2 = y1 + 1;
        int y2days = isLeap(y2)?366:365;
        while (x >= y2days)
        {
            x -= y2days;
            y2++;
            y2days = isLeap(y2)?366:365;
        }
        offset2 = x;
    }
 
    // Find values of day and month from
    // offset of result year.
    int m2, d2;
    revoffsetDays(offset2, y2, &d2, &m2);
 
    cout << "d2 = " << d2 << ", m2 = " << m2
         << ", y2 = " << y2;
}
 
// Driven Program
int main()
{
    int d = 14, m = 3, y = 2015;
    int x = 366;
 
    addDays(d, m, y, x);
 
    return 0;
}

Java

// Java program to find date after adding
// given number of days.
 
class GFG
{
     
// Find values of day and month from
// offset of result year.
static int m2, d2;
     
// Return if year is leap year or not.
static boolean isLeap(int y)
{
    if (y % 100 != 0 && y % 4 == 0 || y % 400 == 0)
        return true;
 
    return false;
}
 
// Given a date, returns number of days elapsed
// from the beginning of the current year (1st
// jan).
static int offsetDays(int d, int m, int y)
{
    int offset = d;
 
    if(m - 1 == 11)
        offset += 335;
    if(m - 1 == 10)
        offset += 304;
    if(m - 1 == 9)
        offset += 273;
    if(m - 1 == 8)
        offset += 243;
    if(m - 1 == 7)
        offset += 212;
    if(m - 1 == 6)
        offset += 181;
    if(m - 1 == 5)
        offset += 151;
    if(m - 1 == 4)
        offset += 120;
    if(m - 1 == 3)
        offset += 90;
    if(m - 1 == 2)
        offset += 59;
    if(m - 1 == 1)
        offset += 31;
 
    if (isLeap(y) && m > 2)
        offset += 1;
 
    return offset;
}
 
// Given a year and days elapsed in it, finds
// date by storing results in d and m.
static void revoffsetDays(int offset, int y)
{
    int []month={ 0, 31, 28, 31, 30, 31, 30,
                    31, 31, 30, 31, 30, 31 };
 
    if (isLeap(y))
        month[2] = 29;
 
    int i;
    for (i = 1; i <= 12; i++)
    {
        if (offset <= month[i])
            break;
        offset = offset - month[i];
    }
 
    d2 = offset;
    m2 = i;
}
 
// Add x days to the given date.
static void addDays(int d1, int m1, int y1, int x)
{
    int offset1 = offsetDays(d1, m1, y1);
    int remDays = isLeap(y1) ? (366 - offset1) : (365 - offset1);
 
    // y2 is going to store result year and
    // offset2 is going to store offset days
    // in result year.
    int y2, offset2 = 0;
    if (x <= remDays)
    {
        y2 = y1;
        offset2 =offset1 + x;
    }
 
    else
    {
        // x may store thousands of days.
        // We find correct year and offset
        // in the year.
        x -= remDays;
        y2 = y1 + 1;
        int y2days = isLeap(y2) ? 366 : 365;
        while (x >= y2days)
        {
            x -= y2days;
            y2++;
            y2days = isLeap(y2) ? 366 : 365;
        }
        offset2 = x;
    }
    revoffsetDays(offset2, y2);
    System.out.println("d2 = " + d2 + ", m2 = " +
                            m2 + ", y2 = " + y2);
}
 
// Driven Program
public static void main(String[] args)
{
    int d = 14, m = 3, y = 2015;
    int x = 366;
    addDays(d, m, y, x);
}
}
 
// This code is contributed by mits

Python3

# Python3 program to find date after adding
# given number of days.
 
# Return if year is leap year or not.
def isLeap(y):
     
    if (y % 100 != 0 and y % 4 == 0 or y % 400 == 0):
        return True
    return False
 
# Given a date, returns number of days elapsed
# from the beginning of the current year (1st
# jan).
def offsetDays(d, m, y):
     
    offset = d
    switcher = {
        10: 30,
        9: 31,
        8: 30,
        7: 31,
        6: 31,
        5: 30,
        4: 31,
        3: 30,
        2: 31,
        1: 28,
        0: 31
    }
    if (isLeap(y) and m > 1):
        offset += 1
    offset +=switcher.get(m)
    return offset
 
 
# Given a year and days elapsed in it, finds
# date by storing results in d and m.
def revoffsetDays(offset, y,d, m):
    month = [ 0, 31, 28, 31, 30, 31, 30,31, 31, 30, 31, 30, 31 ]
     
    if (isLeap(y)):
        month[2] = 29
    for i in range(1, 13):
        if (offset <= month[i]):
            break
        offset = offset - month[i]
         
    d[0] = offset
    m[0] = i + 1
 
# Add x days to the given date.
def addDays(d1, m1, y1, x):
     
    offset1 = offsetDays(d1, m1, y1)
    if isLeap(y1):
        remDays = 366 - offset1
    else:
        remDays = 365 - offset1
         
    # y2 is going to store result year and
    # offset2 is going to store offset days
    # in result year.
    if (x <= remDays):
        y2 = y1
        offset2 = offset1 + x
    else:
         
        # x may store thousands of days.
        # We find correct year and offset
        # in the year.
        x -= remDays
        y2 = y1 + 1
        if isLeap(y2):
            y2days = 366
        else:
            y2days = 365
             
        while (x >= y2days):
            x -= y2days
            y2 += 1
            if isLeap(y2):
                y2days = 366
            else:
                y2days = 365
         
        offset2 = x
         
    # Find values of day and month from
    # offset of result year.
    m2 = [0]
    d2 = [0]
    revoffsetDays(offset2, y2, d2, m2)
    print("d2 = ",*d2,", m2 = ",*m2,", y2 = ",y2,sep="")
 
# Driven Program
d = 14
m = 3
y = 2015
x = 366
 
addDays(d, m, y, x)
 
# This code is contributed by shubhamsingh10

C#

// C# program to find date after adding
// given number of days.
using System;
class GFG{
     
    // Find values of day and month from
    // offset of result year.
    static int m2, d2;
     
// Return if year is leap year or not.
static bool isLeap(int y)
{
    if (y % 100 != 0 && y % 4 == 0 || y % 400 == 0)
        return true;
 
    return false;
}
 
// Given a date, returns number of days elapsed
// from the beginning of the current year (1st
// jan).
static int offsetDays(int d, int m, int y)
{
    int offset = d;
 
    if(m - 1 == 11)
        offset += 335;
    if(m - 1 == 10)
        offset += 304;
    if(m - 1 == 9)
        offset += 273;
    if(m - 1 == 8)
        offset += 243;
    if(m - 1 == 7)
        offset += 212;
    if(m - 1 == 6)
        offset += 181;
    if(m - 1 == 5)
        offset += 151;
    if(m - 1 == 4)
        offset += 120;
    if(m - 1 == 3)
        offset += 90;
    if(m - 1 == 2)
        offset += 59;
    if(m - 1 == 1)
        offset += 31;
 
    if (isLeap(y) && m > 2)
        offset += 1;
 
    return offset;
}
 
// Given a year and days elapsed in it, finds
// date by storing results in d and m.
static void revoffsetDays(int offset, int y)
{
    int []month = { 0, 31, 28, 31, 30, 31, 30,
                    31, 31, 30, 31, 30, 31 };
 
    if (isLeap(y))
        month[2] = 29;
    int i;
    for (i = 1; i <= 12; i++)
    {
        if (offset <= month[i])
            break;
        offset = offset - month[i];
    }
 
    d2 = offset;
    m2 = i;
}
 
// Add x days to the given date.
static void addDays(int d1, int m1, int y1, int x)
{
    int offset1 = offsetDays(d1, m1, y1);
    int remDays = isLeap(y1) ? (366 - offset1) : (365 - offset1);
 
    // y2 is going to store result year and
    // offset2 is going to store offset days
    // in result year.
    int y2, offset2 = 0;
    if (x <= remDays)
    {
        y2 = y1;
        offset2 = offset1+x;
    }
 
    else
    {
        // x may store thousands of days.
        // We find correct year and offset
        // in the year.
        x -= remDays;
        y2 = y1 + 1;
        int y2days = isLeap(y2) ? 366 : 365;
        while (x >= y2days)
        {
            x -= y2days;
            y2++;
            y2days = isLeap(y2)?366:365;
        }
        offset2 = x;
    }
    revoffsetDays(offset2, y2);
    Console.WriteLine("d2 = " + d2 + ", m2 = " +
                        m2 + ", y2 = " + y2);
}
 
// Driven Program
static void Main()
{
    int d = 14, m = 3, y = 2015;
    int x = 366;
    addDays(d, m, y, x);
}
}
// This code is contributed by mits

Javascript

<script>
 
// Javascript program to find date after
// adding given number of days.   
 
// Find values of day and month from
// offset of result year.
var m2, d2;
     
// Return if year is leap year or not.
function isLeap(y)
{
    if (y % 100 != 0 &&
        y % 4 == 0 ||
        y % 400 == 0)
        return true;
 
    return false;
}
 
// Given a date, returns number of
// days elapsed from the beginning
// of the current year (1st jan).
function offsetDays(d , m , y)
{
    var offset = d;
 
    if (m - 1 == 11)
        offset += 335;
    if (m - 1 == 10)
        offset += 304;
    if (m - 1 == 9)
        offset += 273;
    if (m - 1 == 8)
        offset += 243;
    if (m - 1 == 7)
        offset += 212;
    if (m - 1 == 6)
        offset += 181;
    if (m - 1 == 5)
        offset += 151;
    if (m - 1 == 4)
        offset += 120;
    if (m - 1 == 3)
        offset += 90;
    if (m - 1 == 2)
        offset += 59;
    if (m - 1 == 1)
        offset += 31;
 
    if (isLeap(y) && m > 2)
        offset += 1;
 
    return offset;
}
 
// Given a year and days elapsed in it, finds
// date by storing results in d and m.
function revoffsetDays(offset, y)
{
    var month = [ 0, 31, 28, 31, 30, 31, 30,
                  31, 31, 30, 31, 30, 31 ];
 
    if (isLeap(y))
        month[2] = 29;
 
    var i;
    for(i = 1; i <= 12; i++)
    {
        if (offset <= month[i])
            break;
             
        offset = offset - month[i];
    }
    d2 = offset;
    m2 = i;
}
 
// Add x days to the given date.
function addDays(d1 , m1 , y1 , x)
{
    var offset1 = offsetDays(d1, m1, y1);
    var remDays = isLeap(y1) ? (366 - offset1) :
                               (365 - offset1);
 
    // y2 is going to store result year and
    // offset2 is going to store offset days
    // in result year.
    var y2, offset2 = 0;
    if (x <= remDays)
    {
        y2 = y1;
        offset2 =offset1 + x;
    }
    else
    {
         
        // x may store thousands of days.
        // We find correct year and offset
        // in the year.
        x -= remDays;
        y2 = y1 + 1;
        var y2days = isLeap(y2) ? 366 : 365;
         
        while (x >= y2days)
        {
            x -= y2days;
            y2++;
            y2days = isLeap(y2) ? 366 : 365;
        }
        offset2 = x;
    }
     
    revoffsetDays(offset2, y2);
    document.write("d2 = " + d2 +
                   ", m2 = " + m2 +
                   ", y2 = " + y2);
}
 
// Driver code
var d = 14, m = 3, y = 2015;
var x = 366;
 
addDays(d, m, y, x);
 
// This code is contributed by Amit Katiyar
 
</script>

Producción: 

d2 = 14, m2 = 3, y2 = 2016

Este artículo es una contribución de Anuj Chauhan . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a contribuir@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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