Fel veckonummer med .NET Frameworks GregorianCalendar
Om ni någon gång försökt räkna ut svenska veckonummer med .NET Frameworks GregorianCalendar kanske ni känner till detta problem. Eller så kanske ni använder den utan att känna till problemet (som jag!) och undrade vad som gick snett vid t.ex. nyår 2003/2004. Mina kollegor Sofia Max och Stefan Vestin upplyste mig om att .NETs regel CalendarWeekRule.FirstFourDayWeek inte exakt motsvarar den ISO-standard vi använder i Sverige, ISO 8601:2000. Denna standard nöjer sig inte med villkoret att vecka 1 är den vecka där minst fyra dagar inkluders i det nya året, utan kräver också att en vecka alltid måste innehålla sju dagar, d.v.s. börja på en måndag och sluta på en söndag.
För att räkna ut svenskt veckonummer enligt ISO 8601:2000 kan man använda sig av följande kod (ladda ned som textfil här):

2 kommentar(er):
Stort tack! Fungerar perfekt.
Jag nästan misstänkte att dessa rutiner har problem, och jag talar inte specifikt om dotnet, utan den gamla vanliga vbscript för asp etc. Det är tydligen samma problem.
Måndagen den 2003-12-29 ska vara vecka 1 (av 2004) eftersom det är första dagen av en vecka som inkluderar minst 4 dagar av 2004. Microsofts funktion returnerar dock felaktigt vecka 53 för denna måndag.
Hej Joakim,
jag har precis talat med SIS om detta eftersom jag och en kollega inte fick till det med datum i .NET. Dock kände den personen jag talade med inte till tillägget som du nämner här.
Stort tack för ditt inlägg.
/Stefan
Skicka en kommentar