Avatar billede Kristian H Nybegynder
23. januar 2010 - 10:09 Der er 5 kommentarer og
1 løsning

Udregning af løn

Hejsa

Jeg skal udregne løn baseret på to DateTimes, en Start (DateTime) og Slut (DateTime). Problemet ligger i at, i perioden mellem de to DateTimes er der forskellige lønkoder. Dvs. at hvis f.eks. at arbejdetiden mellem kl 06 og 18 giver lønkode 0, mellem kl 18 og 22 giver en lønkode 1 og arbejdstiden mellem kl. 22 og 06 giver lønkode 2.

Nogen eksempler på hvordan dette kan gøres?

Mvh.
Kristian
Avatar billede claes57 Ekspert
23. januar 2010 - 12:30 #1
jeg ville tage den ene databasepost, og splitte den op i tre - derefter slette den originale. Dette ville jeg gøre i en kørsel før selve løn-beregningen går i gang.
Derefter er der en post pr lønkode, og der kan beregnes og adderes.
Avatar billede arne_v Ekspert
24. januar 2010 - 00:34 #2
Forslag:

using System;

namespace E
{
    public struct DAN
    {
        public int D;
        public int A;
        public int N;
    }
    public class Program
    {
        public static DAN Calc(DateTime start, DateTime slut)
        {
            DAN res = new DAN();
            DateTime dt = start.AddMinutes(1);
            while(dt <= slut)
            {
                if(dt.Hour < 6)
                {
                    res.N++;
                }
                else if(dt.Hour < 18)
                {
                    res.D++;
                }
                else if(dt.Hour < 22)
                {
                    res.A++;
                }
                else
                {
                    res.N++;
                }
                dt = dt.AddMinutes(1);
            }
            return res;
        }
        public static void Main(string[] args)
        {
            DAN res = Calc(DateTime.Parse("05:30"), DateTime.Parse("22:30"));
            Console.WriteLine(res.D + " " + res.A + " " + res.N);
            Console.ReadKey();
        }
    }
}

Det er ikke den hurtigste måde at beregne det på, men logikken er til at overskue.
Avatar billede arne_v Ekspert
01. marts 2010 - 02:52 #3
Kommet videre ?
Avatar billede Kristian H Nybegynder
03. marts 2010 - 09:16 #4
@Anne_v: Undskyld jeg ikke har fået svaret. Ja det virker sådan set som det skal, dog er jeg lidt bekymret for performance når jeg skal løbe 120 ansatte igennem med hver 30 vagter. Dog skal det siges at jeg ikke har haft mulighed for at teste det hele endnu.

Hvis du har et andet løsningsforslag må du også gerne smide det, ellers skal du være velkommen til at smide et svar så du kan få dine point ;)
Avatar billede arne_v Ekspert
03. marts 2010 - 14:34 #5
Jeg ville ikke vare bekymret omkring performance. Jeg vil tro at dine 120 x 30 kan koeres paa et sekund eller deromkring.

Men ja - algoritmen kunne godt optimeres meget, men så ville der blive en masse snaskede beregninger.
Avatar billede arne_v Ekspert
03. marts 2010 - 14:34 #6
og et svar
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