una sistema semanas semana obtener numero net mes fecha año actual c# .net calendar week-number

c# - sistema - obtener numero de semana vb net



System.Globalization.Calendar.GetWeekOfYear() devuelve resultados impares (3)

Estoy en el medio de calcular los números de semana para las fechas, pero el System.Globalization.Calendar está System.Globalization.Calendar resultados impares para (entre otros años) el 31 de diciembre del año 2007 y 2012.

Calendar calendar = CultureInfo.InvariantCulture.Calendar; var date = new DateTime(2007, 12, 29); for (int i = 0; i < 5; i++) { int w = calendar.GetWeekOfYear(date, CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); Console.WriteLine("{0}/t{1}", date.ToString("dd.MM.yyyy"), w); date = date.AddDays(1); }

Resultados

29.12.2007 52 30.12.2007 52 31.12.2007 53 <-- 01.01.2008 1 02.01.2008 1 29.12.2012 52 30.12.2012 52 31.12.2012 53 <-- 01.01.2013 1 02.01.2013 1

Por lo que yo entiendo, no debería haber una semana 53 en el año 2007 y 2012, pero los días deberían incluirse en la semana 1. ¿Hay alguna manera de cambiar este comportamiento en el Calendar ?


Eche un vistazo a los valores de CalendarWeekRule . Está utilizando FirstFourDayWeek , por lo que está obteniendo los valores que describe. Si desea que cada semana tenga exactamente 7 días, debe usar FirstFullWeek .

En su caso, eso significaría que el 31. 12. 2007 será la semana 53, pero también 2. 1. 2008.



No tiene que haber 52 semanas para que los identificadores de la semana sean únicos, simplemente no tiene necesariamente 7 días en una semana en particular.

Si esto es un problema para usted, agregue código para manejar el caso extremo.