Pregunta

¿Cómo puedo obtener la fecha del último domingo de un año en C #? ¿Será de ayuda la clase gregoriancalendar?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top