Avatar billede innercitydk Nybegynder
04. august 2006 - 16:48 Der er 8 kommentarer og
2 løsninger

liste med datoer mellem 2 datoer

Som udvidelse til dette spørgsmål:

http://www.eksperten.dk/spm/723861

som blev besvaret vha dette spørgsmål:

http://www.eksperten.dk/spm/665318?Esession=04c764a3e88e6a22de6c1fe2176f1531

Ønskes der en ligeså præcis metode der kan returnere eksakte datoer mellem 2 datoer. Der skal altså ligesom før tages højde for skudår. Hvis der f.eks skrives

Arraylist resultat=datoerMellem("14-01-2002", "21-01-2004");

skal arraylisten indeholde alle de mulige datoer der er mellem de 2 input datoer, begge inklusiv.

Håber der er en venlig sjæl der kan hjælpe.


Vh Nicki
Avatar billede arne_v Ekspert
04. august 2006 - 16:59 #1
2 x DateTime.Parse for at konvertere fra String til DateTime
en while loekke (<= virker for DateTime)
ArrayList Add enten af DateTime object eller ToString
DateTime AddDays
Avatar billede nielle Nybegynder
04. august 2006 - 17:07 #2
Ville nu bruge en for-løkke, men ellers det samme princip:

        public static ArrayList datoerMellem(string dato1, string dato2)
        {
            DateTime datoFra = DateTime.Parse(dato1);
            DateTime datoTil = DateTime.Parse(dato2);

            ArrayList result = new ArrayList();
            for (DateTime dato = datoFra; dato <= datoTil; dato=dato.AddDays(1))
                result.Add(dato);

            return result;
        }
Avatar billede innercitydk Nybegynder
04. august 2006 - 21:06 #3
Er det virkeligt så simpelt :) Returnerer den de eksakte datoer mellem de to foruddefinerede? Jeg spørger bare fordi at der var noget kode i ugemetoden jeg ikke kunne gennemskue:

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

For os upcoming developers kunne det være et pluds med en enkelt kommentar eller to i kode hvor der bruges så mange forskellige faktorer ;)

Vh Nicki
Avatar billede arne_v Ekspert
04. august 2006 - 21:19 #4
AddDays ligger 24 timer til

der er ikke de store problemer i at lave den funktion

uge dag er lidt tricky

jeg proevede lige at finde Claus Toenderings sider igen, men han har tilsyneladende
opdateret formlerne siden jeg sidste laeste dem

enten maa du igang med at studere eller saa maa du bare acceptere at saadan er det

de fleste kan huske at exp(t) = t^0/0! + t^1/1! + t^2/2! + t^3/3! + ...
men betydeligt faerre kan huske hvorfor
Avatar billede innercitydk Nybegynder
04. august 2006 - 21:41 #5
Hehe så længe det virker ;) Hvis jeg vil trække lørdage og søndage ud af Arraylisten inden den returneres hvad skal der så til? Skal jeg oprette et nyt spm?

Vh
Avatar billede innercitydk Nybegynder
04. august 2006 - 22:23 #6
smider lige lidt flere point efter en løsning..
Avatar billede nielle Nybegynder
04. august 2006 - 22:41 #7
Hvis du ikke ønsker at have lør- og søndage med:

        public static ArrayList datoerMellem(string dato1, string dato2)
        {
            DateTime datoFra = DateTime.Parse(dato1);
            DateTime datoTil = DateTime.Parse(dato2);

            ArrayList result = new ArrayList();
            for (DateTime dato = datoFra; dato <= datoTil; dato = dato.AddDays(1))
            {
                if (dato.DayOfWeek != DayOfWeek.Saturday && dato.DayOfWeek != DayOfWeek.Sunday)
                    result.Add(dato);
            }

            return result;
        }
Avatar billede innercitydk Nybegynder
05. august 2006 - 10:33 #8
Super. Smid et svar begge to..

Vh Nicki
Avatar billede nielle Nybegynder
05. august 2006 - 13:51 #9
Svar :^)
Avatar billede arne_v Ekspert
05. august 2006 - 16:28 #10
.
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