Avatar billede innercitydk Nybegynder
02. august 2006 - 23:28 Der er 14 kommentarer og
2 løsninger

Returner eksakt ugenr

Jeg har brug for en metode der altid returnerer den rigtige dato, ugenr og dag i forhold til en foruddefineret dato.

Jeg har lavet følgende kode, der ønskes udvidet, som returnerer ugenr. Problemet er bare at det ikke altid er 100% præcis (test med forskellige datoer.

string tmp = TextBox1.Text; //dato tastet ind på formen dd-mm-åååå
DateTime startdag = DateTime.Parse("01-01-" + tmp.Substring(tmp.Length - 3, 3));

//dtmp bruges til at finde den 1. dag i et givent år. dette bruges til at finde ugenr længere nede i koden
DayOfWeek dtmp = new DayOfWeek();
switch (startdag.ToString("dddd"))
{
    case "mandag":
        dtmp = DayOfWeek.Monday;
        break;
    case "tirsdag":
        dtmp = DayOfWeek.Tuesday;
        break;
    case "onsdag":
        dtmp = DayOfWeek.Wednesday;
        break;
    case "torsdag":
        dtmp = DayOfWeek.Thursday;
        break;
    case "fredag":
        dtmp = DayOfWeek.Friday;
        break;
    case "lørdag":
        dtmp = DayOfWeek.Saturday;
        break;
    case "søndag":
        dtmp = DayOfWeek.Sunday;
        break;
}
System.Globalization.CultureInfo cult = new System.Globalization.CultureInfo("da-DK");
System.Globalization.Calendar cal = cult.Calendar;
Label1.Text = cal.GetWeekOfYear(DateTime.Parse(TextBox1.Text.ToString()), System.Globalization.CalendarWeekRule.FirstDay, dtmp).ToString();


Hvis en venlig sjæl kan se hvordan koden skal "moddes" så den altid returnerer den helt korrekte uge ud fra en given dato.

Vh Nicki
Avatar billede staever Nybegynder
02. august 2006 - 23:40 #1
Jeg har noget til udregning af ugenummer her ihvertfald:

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;
}

mindes faktisk jeg engang fandt det herinde på www.exp.dk, men er ikke helt sikker
Avatar billede hmortensen Nybegynder
02. august 2006 - 23:46 #2
Hvorfor bruger du en case til at finde DayOfWeek, når du har dit DateTime object?
DayOfWeek dtmp = startdag.DayOfWeek;
Avatar billede arne_v Ekspert
03. august 2006 - 00:24 #3
koden er herfra
Avatar billede dr_chaos Nybegynder
03. august 2006 - 07:54 #4
Avatar billede innercitydk Nybegynder
03. august 2006 - 09:20 #5
Det ser fint ud, tror det er inde på noget af det rigtige. Men jeg læste at koden ikke helt stemmer overens med en mayland kalender?! Det er nemlig vigtigt at den passer overens da det skal bruges til noget ferieplanlægning.

hmortensen: Havde jeg ikke lige tænkt på ;) Men ja den er da overflødig hehe.

Vh
Avatar billede dr_chaos Nybegynder
03. august 2006 - 09:25 #6
det med en mayland kalender var mig som skrev det og det var mig som tog fejl :)
Så den skulle være god nok.
Avatar billede innercitydk Nybegynder
03. august 2006 - 10:48 #7
Ok mange tak for hjælpen. Jeg vil gerne dele pointene imellem jer, så smid et svar.

Vh Nicki
Avatar billede dr_chaos Nybegynder
03. august 2006 - 11:05 #8
svar
Avatar billede staever Nybegynder
03. august 2006 - 13:10 #9
Ingen point til mig, ville være forkert, da jeg egentligt jo bare har kopieret hvad arne_v har lavet tidligere :)
Avatar billede arne_v Ekspert
03. august 2006 - 13:50 #10
det er 112% i orden at tage point for at bruge ideer fundet andet steds inkl.
andre spørgsmål

ellers ville der ikke blive uddelt ret mange point her

de fleste har fundet svarene et eller andet sted

jeg har f.eks. hapset formlen fra Claus Tønnerings kalender side
Avatar billede staever Nybegynder
03. august 2006 - 16:02 #11
ok, så sender jeg svar :)
Avatar billede innercitydk Nybegynder
03. august 2006 - 19:00 #12
Godt vi kan bruge hinandens viden konstruktivt ;)

Mange tak for hjælpen, helt tilbage til Arne v, for at "opdage" denne kode :)

Smid et svar Arne, du har da også del i kagen.
Avatar billede arne_v Ekspert
03. august 2006 - 21:33 #13
bare giv de andre

jeg har faaet point for den kode masser af gange, saa den er forlaengst betalt

(baade i C#, C og VB !)
Avatar billede innercitydk Nybegynder
03. august 2006 - 22:09 #14
Bare i orden..
Avatar billede solarus Nybegynder
16. september 2007 - 23:59 #15
Avatar billede arne_v Ekspert
17. september 2007 - 00:25 #16
Den formel duer heller ikke.

Prøv og smid 31. December 2007 ind i den - den siger at det er uge 53.

Og det er det ikke - det er en mandag og er uge 1.

[Windows XP SP2 med .NET 2.0/3.0]
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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