Último domingo de un año en c #
-
07-07-2019 - |
Pregunta
¿Cómo puedo obtener la fecha del último domingo de un año en C #? ¿Será de ayuda la clase gregoriancalendar?
Solución
No sé si hay un método para eso, pero una forma simple es verificar los últimos 7 días de diciembre, comenzando desde el día 31 y regresando.
Actualización: en realidad si los días de la semana están numerados así:
0 Sun, 1 Mon, ... 6 Sat
luego
lastSunday = 31 - DayOfWeek(31, 12, 2009) // pseudocode
Otros consejos
No es la mejor solución, pero debería funcionar:
int year = 2009;
DateTime lastSunday = new DateTime(year, 12, 31);
while (lastSunday.DayOfWeek != DayOfWeek.Sunday)
{
lastSunday = lastSunday.AddDays(-1);
}
Creo que puede usar la representación entera de la enumeración DayOfWeek
para esto:
DateTime endOfYear = new DateTime(DateTime.Now.Year, 12, 31);
DateTime lastSunday = endOfYear.AddDays(-(int)endOfYear.DayOfWeek);
Como la enumeración de DayOfWeek comienza en 0 para el domingo, esto debería funcionar:
int Year = 2009;
DateTime endOfYear = new DateTime(Year, 12, 31);
DateTime sunday = endOfYear.AddDays(-(int)endOfYear.DayOfWeek);
Puede averiguar qué día de la semana es el 31 de diciembre. Luego (si no es domingo) calcula de nuevo ...
for (int y=2009; y<=2018; y++)
{
DateTime dt = new DateTime(y, 12, 31); // last day of year
dt = dt.AddDays(-(int)dt.DayOfweek); // sun == 0, so then no change
Console.WriteLine(dt.ToString("dddd dd-MM-yyyy"));
}
Lo siento, pero no tengo una versión C # si ves aquí para la versión VB. Sospecho que podrás convertirlo.
Eso depende ... ¿Desea el último día del año que es domingo o el domingo de la última semana del año? Dependiendo de cómo se determinen las semanas en su país, la última semana del año puede durar hasta seis días en el próximo año.
Si quieres el primero, puedes comenzar el 31 de diciembre y regresar hasta que encuentres un domingo.
Si desea el segundo, deberá usar el método System.Globalizartion.Calendar.GetWeekOfYear
para averiguar dónde comienza la primera semana del próximo año y tomar el día anterior.