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.
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)