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.
La documentación de la enumeración de CalendarWeekRule especifica que "no se correlaciona directamente con ISO 8601" y enlaces al formato de Semana del año ISO 8601 en Microsoft .Net , una entrada de blog que describe las diferencias.
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.