public static int Week1(int year, int mon, int day) { return (new CultureInfo("da-DK")).Calendar.GetWeekOfYear(new DateTime(year, mon, day), CalendarWeekRule.FirstFourDayWeek, DayOfWeek.Monday); } public static int Week2(int year, int mon, int day) { int a = (14 - mon) / 12; int y = year + 4800 - a; int m = mon + 12*a - 3; int JD = day + (153 * m + 2)/5 + 365*y + y/4 - y/100 + y/400 - 32045; int d4 = (((JD + 31741 - JD % 7) % 146097) % 36524) % 1461; int L = d4 / 1460; int d1 = ((d4 - L) % 365) + L; return d1 / 7 + 1; }
Hvilket ISO Standard er den udregning efter?... den virker imiddelbar noget mere kompleks end den tidligere DS/EN 28601:1993 som er erstattet af DS/ISO 8601:2005...
Uden at have læst DS/EN 28601:1993 selv, så ser jeg mange steder at første uge i et år er defineret ud fra den første Torsdag i et år ifl. den gamle standard... hvad er den nu?...
For umiddelbart virker det som en lidt smallere sag at udregne... så spekulerede på om det var blevet mere kompleks med den nye?
Ja det er samme standard, standarden for: Dataelementer og udvekslingsformater. Informationsudveksling Angivelse af dato og tid... de 2 numre er udgave numre...
Der er faktisk en mellemliggende udgave mellem de to fra 2001...
Normalt bruger jeg:
public static int WeekNum( DateTime date ) { int dow = (int)date.DayOfWeek == 0 ? 7 : (int)date.DayOfWeek; return ( ( ( date.AddDays( 4 - dow ).DayOfYear + 6 ) / 7 ) + 0 ); }
Men det er nok smag og behag hvad man mener der er mest overskueligt...
Grunden til interessen var lige at jeg har nogle ting der bruger overstående kode, så var interesseret i om der var nogle ting der havde ændret sig så jeg kunne få rettet det til om nødvendigt... Var såmænd bare derfor...
Den primære grund til at jeg bruger den lange formel er at den er sprog og platform uafhængig.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.