Laden...

Aus Zeitspanne die Wochentage ermitteln

Erstellt von oehrle vor 13 Jahren Letzter Beitrag vor 13 Jahren 3.098 Views
O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
Aus Zeitspanne die Wochentage ermitteln

Hi, ich stehe gerade vor einem Problem.
Ich habe ein Startdatum und ein Enddatum, diese können je nach BEdarf variieren, das also eine Zeitspanne von mehreren Tagen dazwischen sein kann. Nun kann die Zeispanne auch über das Wochenende hinaus gehen. Ich möchte dann aus dieser Zeitspanne den Samstag und Sonntag herausnehmen, das diese Tage in meiner Zeitspannenauswertung ausgeschlossen werden.
Hat dazu jemand eine Idee? Da gibts doch bestimmt etwas fertiges, oder?
Habe mich schon dran probiert aber ohne Erfolg.

109 Beiträge seit 2010
vor 13 Jahren

Ich weiß grad nicht mehr woher ich das auf geschanppt habe, aber evtl hilf dir diese klasse


public enum DateInterval {
    Year,
    Month,
    Weekday,
    Day,
    Hour,
    Minute,
    Second
} 

class DateDifference
{
    public static long DateDiff(DateInterval interval, DateTime date1, DateTime date2) {

        TimeSpan ts = date2 - date1;

        switch (interval) {
            case DateInterval.Year:
                return date2.Year - date1.Year;
            case DateInterval.Month:
                return (date2.Month - date1.Month) + (12 * (date2.Year - date1.Year));
            case DateInterval.Weekday:
                return Fix(ts.TotalDays) / 7;
            case DateInterval.Day:
                return Fix(ts.TotalDays);
            case DateInterval.Hour:
                return Fix(ts.TotalHours);
            case DateInterval.Minute:
                return Fix(ts.TotalMinutes);
            default:
                return Fix(ts.TotalSeconds);
        }
    }

    private static long Fix(double Number)
    {
        if (Number >= 0)
        {
            return (long)Math.Floor(Number);
        }
        return (long)Math.Ceiling(Number);
    } 
}

Ich beschütze das was am Wichtigsten ist!

O
oehrle Themenstarter:in
461 Beiträge seit 2009
vor 13 Jahren
Erledigt, habe mir was ausgedacht

Hi, habe mir was gestrickt, war ja nicht schwer.
Ich nehme mein Zieldatum, das angenommen nächste Woche Mittwoch ist, und mein Startdatum, das heut (Dienstag) ist. Dann habe ich das über eine do.. while-Schleife ablaufen lassen.
Ich beginne am Starttag und addiere immer einen Tag drauf, und prüfe ob es eine Samstag ode Sonntag ist. Wenn nicht, wird ein Merker inkrementiert, ansonsten wird er nicht inkrementiert. So kann ich die Wochenendtage ausgrenzen.


 private int EditierzeitraumAuswerten(DateTime zielDatum)
        {
            int tageZaehler = 0;
            double merker = 0;
            DateTime tag;
            do
            {
                merker++;
                tag = DateTime.Now.AddDays(merker);
                if (tag.DayOfWeek == DayOfWeek.Saturday || tag.DayOfWeek == DayOfWeek.Sunday)
                    continue;

                tageZaehler++;

            } while (zielDatum.ToShortDateString() != tag.ToShortDateString());
                    
            
            return tageZaehler;
        }

L
416 Beiträge seit 2008
vor 13 Jahren
EditierzeitraumAuswerten(DateTime.Now)

-> Endlosschleife

1.665 Beiträge seit 2006
vor 13 Jahren
while (zielDatum.ToShortDateString() != tag.ToShortDateString());  

Das ist was für unsere Horror-Code Abteilung 😉

DateTime kannst und solltest du direkt vergleichen, also ohne .ToShortDateString().
oder um die Zeit nicht in den Vergleich miteinzubeziehen:

zielDatum.Date != tag.Date
K
35 Beiträge seit 2010
vor 13 Jahren

Hallo vielleicht hilft dir das weiter das ist eine Funktion die den aktuellen WochenTag ermittellt:


public int WochenTag()
        {
            long w;
            int jahr = this.jahr;
            int monat = this.monat;
            int tag = this.tag;
            if (this.monat <= 2)
            {
                jahr--;
                monat += 12;
            }
            w = (long)(365.25 * jahr) + (long)(30.6001 * (monat + 1)) + 1720983 + tag;
            return ((int)(w % 7));
        }

Diese Funktion Liefert dir dann einen Wert von 1-7 also von Montag - Sonntag.
Dann kannst du einfach eine if machen die den Fall 6 und 7 ausschließt.

Hoffe das es dir Hilft

mfg

1.665 Beiträge seit 2006
vor 13 Jahren

Mit DayOfWeek hat er doch bereits eindeutige Werte, die ihm sagen, ob es Samstag oder Sonntag ist.

K
35 Beiträge seit 2010
vor 13 Jahren

Achso dann hab ich sein Problem falsch verstanden sorry.