Avatar billede fijal Nybegynder
13. juli 2011 - 10:16 Der er 4 kommentarer

Bestemmelse af hverdage, lørdage og søndage

Hej er der en nem måde at tælle mængden af hverdage, lørdage og søndage i eksempelvis 1/1-2013 til den sidste dag i måneden ?
Avatar billede arne_v Ekspert
13. juli 2011 - 15:55 #1
using System;

namespace E
{
    public class Program
    {
        public static void Count(DateTime start)
        {
            int wd = 0;
            int sa = 0;
            int su = 0;
            DateTime curr = start;
            while(curr.Month == start.Month)
            {
                switch(curr.DayOfWeek)
                {
                    case DayOfWeek.Monday:
                    case DayOfWeek.Tuesday:
                    case DayOfWeek.Wednesday:
                    case DayOfWeek.Thursday:
                    case DayOfWeek.Friday:
                        wd++;
                        break;
                    case DayOfWeek.Saturday:
                        sa++;
                        break;
                    case DayOfWeek.Sunday:
                        su++;
                        break;
                }
                curr = curr.AddDays(1);
            }
            Console.WriteLine(wd + " " + sa + " " + su);
        }
        public static void Main(string[] args)
        {
            Count(new DateTime(2013, 1, 1));
            Console.ReadKey();
        }
    }
}
Avatar billede z5ivan Nybegynder
05. august 2011 - 14:11 #2
En lidt mere linq-alike løsning kunne også være:

IEnumerable<DateTime> DateRange(DateTime stdate)
{
    for (int i = 0; i < (stdate.AddMonths(1) - stdate).Days; i++)
        yield return stdate.AddDays(i);
}

void DayCount()
{
    var qdays = DateRange(new DateTime(2013, 1, 1));
    var SundayCount = qdays.Where(dt => dt.DayOfWeek == DayOfWeek.Sunday).Count();
    var SaturdayCount = qdays.Where(dt => dt.DayOfWeek == DayOfWeek.Saturday).Count();
    var DayCount = qdays.Select(d => (int)d.DayOfWeek).Where(dow => dow >= 1 && dow <= 4).Count();
}
Avatar billede arne_v Ekspert
06. august 2011 - 01:16 #3
Det er ogsaa en tilgang.

Men bemaerk at:
1) koden ikke taeller til den sidste i maanede men taeller en maaned frem (og en maaned frem kan godt vaere lidt grumset i vores kalender)
2) DayCount taeller kun antal dage som er mandag-torsdag ikke mandag-fredag
3) det betyder naeppe noget men 6 loekker virker heftigt
Avatar billede z5ivan Nybegynder
06. august 2011 - 15:42 #4
Ja, det var mest ment som et hurtigt eksempel og var ikke testet.
Jeg ser kun 3 løkker og det giver jo samme kompleksitet.

Her er den korrekte kode:

DateTime stdate = new DateTime(2012, 1, 1), nm = stdate.AddMonths(1);
var qdays = Enumerable.Range(0, (new DateTime(nm.Year, nm.Month, 1) - stdate).Days)
                            .Select(d => stdate.AddDays(d).DayOfWeek).ToArray();

int SundayCount = qdays.Where(dow => dow == DayOfWeek.Sunday).Count();
int SaturdayCount = qdays.Where(dow => dow == DayOfWeek.Saturday).Count();
int DayCount = qdays.Select(d => (int)d)
                        .Where(dow => dow >= 1 && dow <= 5).Count();
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