hace unos días escuchaba que tenían un problema muy sencillo, era que se necesitaba calcular años bisiesto para unos elementos .

entonces pensé que era un buen ejercicio para unprogramador y tocar .net core para conocer conceptos básicos en este lenguaje, hay que saber que hay una formula muy simple para calcular año bisiesto.

Formula para calcular año bisiesto

Como podemos ver en la imagen anterior tiene que ver con la regla para calcular año bisiesto, este debe ser de la siguiente manera

Si el año que queremos calcular es divisible con 400 este será un año bisiesto.

En caso de cumplir esta condición, ya sabemos que es bisiesto así que no necesitamos calcular más, si nos dio error vamos por la siguiente validación.

Ahora debemos ver si es divisible por 4 pero no debe ser divisible por 100, si cumple esta condición entonces es un año bisiesto.

La regla resumida para calcular año bisiesto es el siguiente:

Cada 400 años hay un ajuste, ya que el año aun usando años bisiesto se pierden milésimas de segundo, entonces cada 400 años se agrega un día extra.

Y como ya sabemos cada 4 años tenemos un día extra.

Calcular año bisiesto con código

para hacer un calculo para ver si es divisible se usa (%) para hacer este calculo básico, funciona en casi todo los lenguajes.

vamos a crear nuestro proyecto nuevo con c# y .net core 2.1, para esto usare una mac, pero los pasos son los mismos para windows.

proyecto calcular año bisiesto
vamos a elegir .net core 2,1 y colocamos el nombre del proyecto en la siguiente pantalla

Vamos a entrar a program.cs que es nuesta clase principal, ahi vamos a escribir lo siguiente, vamos a pedir que escriban en consola el año a calcular.

Console.WriteLine("calcular bisiestos \n");
Console.WriteLine("año a calcular \n");
string ano1 = Console.ReadLine();

con console.ReadLine() vamos a hacer que pause el programa y espere que nos den un dato, recuerdo que cualquier cosa que se coloque en la consola será de tipo string, entonces nosotros debemos convertirlo a tipo int

int a = Convert.ToInt32(ano1);

Validando e iniciando calculo de año bisiesto

vamos a hacer un if muy sencillo, vamos a convertir ahí mismo el string a int y veremos el resultado, en c# hay una forma de imprimir y concatenar muy sencilla, en ves de usar esta expresión:

Console.WriteLine(“el año “+ bisiesto + ” no es bisiesto”);

podemos usar la siguiente expresión

Console.WriteLine(“el año {0} no es bisiesto”, bisiesto);

De esta manera imprime en el valor 0 la constante que le decimos que incruste.

if (Convert.ToInt32(ano1) % 4 == 0 && Convert.ToInt32(ano1) % 100 != 0 || Convert.ToInt32(ano1) % 400 == 0)
{
    Console.WriteLine("Es bisiesto {0}\n",ano1);
}
else
{
    Console.WriteLine("no es bisiesto {0} \n", ano1);
}
Console.ReadKey();

El resultado lo vemos de la siguiente manera:

Resolviendo el problema de años bisiestos

vamos a hacer algo un poco mas rebuscado, vamos a devolver cuantas veces son año bisiestos en un lapso de tiempo, para esto usaremos la propiedad List de c#.

La propiedad list es una forma más avanzada de hacer array pero el principio es el mismo, también vamos a usar un for para recorrer nuestros valores hasta llegar el que necesitamos.

Código para calcular año bisiesto en c#

            Console.WriteLine("calcular bisiestos \n");
            Console.WriteLine("año a calcular \n");
            string ano1 = Console.ReadLine();
            Console.WriteLine("año final a calcular \n");
            string ano2 = Console.ReadLine();
            List<int> anosbi = new List<int>();
            for (int a = Convert.ToInt32(ano1); a <= Convert.ToInt32(ano2); a++)
            {

                if (a % 4 == 0 && a % 100 != 0 || a % 400 == 0)
                {
                    Console.WriteLine("Es bisiesto {0}\n", a);
                    anosbi.Add(a);
                }
                else
                {
                    Console.WriteLine("no es bisiesto {0} \n", a);
                }
            }
            Console.WriteLine("+" + anosbi.Count);
            Console.ReadKey();

El resultado es el siguiente:

y como un extra voy a poner el código para calcular año bisiesto en SQL

DECLARE @anoa date 
SET @anoa = '2018-11-25'
DECLARE @anob  date 
SET @anob = '2025-11-25'
DECLARE @num  INT
SET @num = DATEPART(yyyy,@anoa)
DECLARE @biano INT 
SET @biano = 0
WHILE @num <= DATEPART(yyyy,@anob)
BEGIN
 	IF @num % 4 = 0 AND @num % 100 <> 0 OR @num % 400 = 0
	BEGIN
		SET @biano = @biano + 1
		SET @num = @num +1
	END
	ELSE
	BEGIN
		SET @num = @num +1
	END
END
SELECT @biano
GO

El que no maneje sql explicare de manera muy resumida

  • Declare = creacion de variables
  • Set = asiganacion de valor
  • BEGIN/END = siempre van cuando vas a ejecutar alguna sentencia 
  • DATEPART = divide una fecha dependiendo que quieres obtener en este caso yyyy son los años (ejemplo: 2018)

por Cesar Flores

Programador de tiempo completo, Gamer de medio tiempo y fotógrafo ocasionalmente, me gusta el front-end y mi framework favorito es angular aunque no por eso le hago el feo a un nuevo lenguaje.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

%d