Avatar billede jytte Nybegynder
24. januar 2006 - 08:27 Der er 10 kommentarer og
2 løsninger

dansk ugeberegning

Er der nogen som har et link til en uge-beregnings-formel som beregner danske uge-numre.

Egentlig har spørgsmålet ikke noget med .Net at gøre, men jeg skal lave algoritmen i .Net
Avatar billede iblarsen Praktikant
24. januar 2006 - 08:35 #1
Hej jeg har noget .Net kode. Men du burde kunne udlede reglen af dette:

public int WeekNumber(DateTime d)
{
    int yearStarts = (int)(new DateTime(d.Year,1,1).DayOfWeek);
    int doy = d.DayOfYear + (yearStarts + 2) % 7 - 4;

    if (doy < 0)
        return Week_Number(new DateTime(d.Year - 1, 12, 31));

    int week = doy/7+ 1;

    if (week == 53 && d.Day - (d.DayOfWeek == DayOfWeek.Sunday ? 7 : (int)d.DayOfWeek) >= 28)
        return 1;

    return week;
}
Avatar billede dr_chaos Nybegynder
24. januar 2006 - 08:42 #2
du kan bruge denne her den opfylde de officielle krav.
prøv evt. at kigge her hvor der er en større diskussion af dette:
http://www.eksperten.dk/spm/665318?Esession=04c764a3e88e6a22de6c1fe2176f1531
using System;

namespace E
{
    public class Util
    {
        public static int WeekNumber(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;
        }
    }
    class MainClass
    {
        public static void Test(int year, int week)
        {
            Console.WriteLine(year + "/" + week + ":");
            DateTime dt = new DateTime(year-1, 12, 29);
            while(Util.WeekNumber(dt.Year, dt.Month, dt.Day) > 1)
            {
                dt = dt.AddDays(1);
            }
            while(Util.WeekNumber(dt.Year, dt.Month, dt.Day) < week)
            {
                dt = dt.AddDays(1);
            }
            while(Util.WeekNumber(dt.Year, dt.Month, dt.Day) == week)
            {
                Console.WriteLine(dt.ToString("dd-MMM-yyyy"));
                dt = dt.AddDays(1);
            }
        }
        public static void Main(string[] args)
        {
            Test(2000, 1);
            Test(2001, 1);
            Test(2002, 1);
            Test(2003, 1);
            Test(2004, 1);
            Test(2005, 1);
            Test(2006, 1);
        }
    }
}
Avatar billede iblarsen Praktikant
24. januar 2006 - 09:02 #3
Hvis du er i tvivl så klik ind på Teknologisk Institutsside: http://erfa.teknologisk.dk/erfa_net/dotnetdays/2004/downloads.asp
og kig på Claus Tønderings "foredrag" om området. Der ligger osgå noget kode.
Avatar billede jytte Nybegynder
24. januar 2006 - 09:14 #4
Mange tak skal I have.
Hvis i lægger et svar hver deler jeg pointene mellem jer.
Avatar billede dr_chaos Nybegynder
24. januar 2006 - 09:15 #5
svar :)
Avatar billede iblarsen Praktikant
24. januar 2006 - 09:16 #6
endnu et svar
Avatar billede dr_chaos Nybegynder
24. januar 2006 - 09:21 #7
iblarsen husk lige at vælge svar :)
Avatar billede iblarsen Praktikant
24. januar 2006 - 09:22 #8
Undskyld!
Avatar billede dr_chaos Nybegynder
24. januar 2006 - 09:40 #9
går nok.
Er selv meget slem til at glemme det :(
Avatar billede arne_v Ekspert
24. januar 2006 - 15:24 #10
dr chaos's kode er faktisk baseret paa Claus Tønderings formler !
Avatar billede iblarsen Praktikant
24. januar 2006 - 16:20 #11
Tja - det er min kode vel også. Bortset fra at jeg har fjernet kommentarerne
Avatar billede dr_chaos Nybegynder
24. januar 2006 - 16:39 #12
og den er tyvstjålet fra arne_v :)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester