public static int day_of_the_week_Sakamoto(int y, int m, int d)
return ((y + y / 4 - y / 100 + y / 400 + (m switch
1 => 0, 2 => 3, 3 => 2, 4 => 5, 5 => 0, 6 => 3,
7 => 5, 8 => 1, 9 => 4, 10 => 6, 11 => 2, 12 => 4
static string ObtenerNombreDia(int dia)
0 => "Lunes", 1 => "Martes", 2 => "Miércoles",
3 => "Jueves", 4 => "Viernes", 5 => "Sábado",
6 => "Domingo", _ => null
static string ObtenerNombreMes(int mes)
1 => "Enero", 2 => "Febrero", 3 => "Marzo",
4 => "Abril", 5 => "Mayo", 6 => "Junio",
7 => "Julio", 8 => "Agosto", 9 => "Septiembre",
10 => "Octubre", 11 => "Noviembre", 12 => "Diciembre",
public static bool AñoBisiesto(int año)
return año % 4 == 0 && (año % 100 != 0 || año % 400 == 0);
public static int CalculoDiasMes(int año, int mes)
Console.WriteLine("=======================================================\n");
2 => AñoBisiesto(año) ? 29 : 28,
public static void GenerarCalendario(int[,] calendario, int año, int mes)
int primerDiaMes = day_of_the_week_Sakamoto(año, mes, 1);
int diasMes = CalculoDiasMes(año, mes);
for (int i = 0; i < calendario.GetLength(0); i++)
for (int j = 0; j < calendario.GetLength(1); j++)
if (i == 0 && j < primerDiaMes || dia > diasMes)
calendario[i, j] = dia++;
public static void ImprimirCalendario(int[,] calendario, int año, int mes)
Console.WriteLine($"Mes: {ObtenerNombreMes(mes)}");
Console.WriteLine("Lun Mar Mié Jue Vie Sáb Dom");
for (int i = 0; i < calendario.GetLength(0); i++)
for (int j = 0; j < calendario.GetLength(1); j++)
if (calendario[i, j] == 0)
Console.Write($"{calendario[i, j],2} ");
public static int NumeroDias(int[,] calendario, int diaBuscado)
for (int i = 0; i < calendario.GetLength(0); i++)
if (calendario[i, diaBuscado] != 0)
Console.Write("Año (2000-2030) ? ");
año = int.Parse(Console.ReadLine());
if (año < 2000 || año > 2030)
Console.WriteLine("Año incorrecto, introduce de nuevo.");
} while (año < 2000 || año > 2030);
Console.Write("Mes Inicio (1-12) ? ");
mesInicio = int.Parse(Console.ReadLine());
if (mesInicio < 1 || mesInicio > 12)
Console.WriteLine("Mes incorrecto, introduce de nuevo.");
} while (mesInicio < 1 || mesInicio > 12);
Console.Write("Mes Final (1-12) ? ");
mesFinal = int.Parse(Console.ReadLine());
if (mesFinal < mesInicio || mesFinal < 1 || mesFinal > 12)
Console.WriteLine("Mes incorrecto, introduce de nuevo.");
} while (mesFinal < mesInicio || mesFinal < 1 || mesFinal > 12);
Console.Write("Día Buscado (0-6) (L-D) ? ");
diaBuscado = int.Parse(Console.ReadLine());
if (diaBuscado < 0 || diaBuscado > 6)
Console.WriteLine("Día incorrecto, introduce de nuevo.");
} while (diaBuscado < 0 || diaBuscado > 6);
Console.WriteLine($"\nDía Buscado: {ObtenerNombreDia(diaBuscado)}\n");
for (int mes = mesInicio; mes <= mesFinal; mes++)
int[,] calendario = new int[semanas, 7];
GenerarCalendario(calendario, año, mes);
ImprimirCalendario(calendario, año, mes);
Console.WriteLine($"El número total de {ObtenerNombreDia(diaBuscado)} en {ObtenerNombreMes(mes)} es: {NumeroDias(calendario, diaBuscado)}\n");