AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Klasse für Zeitraum erstellen

Ein Thema von Angel4585 · begonnen am 5. Jan 2012 · letzter Beitrag vom 5. Jan 2012
 
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

AW: Klasse für Zeitraum erstellen

  Alt 5. Jan 2012, 13:29
Danke erstmal
Da muss ich jetzt aber erstmal durchsteigen, wie würde ich da jetzt einen Zeitraum a la "Die letzten 3 Monate" (aktuell wäre das dann 1.11.11 - 1.1.12) darstellen?

Ich hab derweil auch bissl gebastelt und bin bisher bei folgender Klasse gelandet( ist jetz halt C# aber lesen kann man das ja trotzdem ):
Code:
    public class Period : IPeriod
    {
        public const int DAYS   = 0;
        public const int WEEKS  = 1;
        public const int MONTHS = 2;
        public const int YEARS  = 3;
       
        private int kind;
        private int start;
        private int length;
        private string name;
       
        public Period(int kind, int start, int length, string name)
        {
            this.kind = kind;
            this.start = start;
            this.length = length;
            this.name = name;
        }
       
        public DateTime GetStart()
        {
            DateTime date = DateTime.Today;
            switch(kind){
                case DAYS:
                    date = date.AddDays(start);
                    break;
                case WEEKS:
                    date = date.AddDays(-(int)date.DayOfWeek + 7*start);
                    break;
                case MONTHS:
                    date = date.AddDays(-date.Day+1).AddMonths(start);
                    break;
                case YEARS:
                    date = date.AddDays(-date.DayOfYear+1).AddYears(start);
                    break;
            }
            return date;
        }
       
        public DateTime GetEnd()
        {
            DateTime date = DateTime.Today;
            switch(kind){
                case DAYS:
                    date = date.AddDays(start+length).AddSeconds(-1);
                    break;
                case WEEKS:
                    date = date.AddDays(-(int)date.DayOfWeek + 7*start + 7*length).AddSeconds(-1);
                    break;
                case MONTHS:
                    date = date.AddDays(-date.Day+1).AddMonths(start+length).AddSeconds(-1);
                    break;
                case YEARS:
                    date = date.AddDays(-date.DayOfYear+1).AddYears(start+length).AddSeconds(-1);
                    break;
            }
            return date;
        }
       
        public string GetName()
        {
            return name;
        }
    }
Beim Start wird übergeben was für eine Art von Spanne es ist, also ob Jahre, Monate, Wochen oder Tage.
Dazu wird ein relativer Start übergeben, 0 wäre heute, bzw diese Woche, dieser Monat usw., -1 wäre gestern bzw letzte Woche..
Ausserdem die Länge des Zeitraumes, z.B. 1 (Anzahl der Tage, Wochen etc)

new Period(Period.DAYS,0,1,"Heute") wäre dann Heute 00:00:00 bis Heute 23:59:59
new Period(Period.DAYS,-1,1,"Gestern") wäre dann Gestern 00:00:00 bis Gestern 23:59:59

Durch diese Struktur hab ich die Möglichkeit die drei vier Werte abzuspeichern und später wieder zu laden, was evtl ein interessantes Feature sein könnte.

Bin grad noch dabei verschiedene Sachen damit zu testen.

Bei meinem Glück gibt es mal wieder irgendwas, was dagegen spricht das so zu machen, könnt mich ja zur Erleuchtungbringen
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz