Supportnet Computer
Planet of Tech

Supportnet / Forum / Anwendungen(Java,C++...)

Datumsvergleich in C#





Frage

Kommen in C# wieder mal nicht weiter :( Folgendes Problem: Ich lese aus einem Verzeichnis alle Datein aus. Der Dateiname dieser Datein enthalten alle ein Datum, in der Form 2002-10-21 Beispieldatei: beispiel-2002-10-21.txt Den Datumsstring herauszubekommen ist gar kein Problem. Als String hab ich also "2002-10-21". So jetzt möchte ich z.B. alle Datein der letzten Woche anzeigen. Meine Überlegung war: Ich baue eine Schleife, die alle Datein durchläuft, und den "Datumsstring" aus dem Dateinnamen mit dem akuellen Datum vergleicht. Jetzt reichen meine Programmierkenntnisse leider nicht mehr. Denn wenn ich den String mit dem Datum vergleiche, und dazu die Operatoren <,>, == einsetzte, funktioniert das ganze nicht. Hab mich vielleicht auch viel zu umständlich ausgedürckt ;( Einfach: Wie vergleiche ich zwei Datumsangaben miteinander, ob sie nur 7 Tage auseinanderliegen, oder ob es mehr als 7 Tagen sind. Danke, danke für die Hilfe!!!

Antwort 1 von BennyBeagle

Na - da musst Du schon ein bißchen die Mathematik bemühen - das kleine Einmaleins sollte schon geläufig sein. ;-)

Im Ernst - eine String-Vergleichsfunktion hilft Dir da nicht weiter. Bau Dir doch einfache eine Zahl zusammen, die die kleinste Einheit Deiner geplanten Auswertemöglichkeiten enthält - z.B. in Tagen. Dann ist es einfach nur ein Vergleich, wie Du es vor hast.

Du kannst aber auch Windows-eigene Datumsfunktionen verwenden. Da wird allerdings ein 64-Bit Integer bemüht, weil die kleinste Einheit 1/1000 Sekunde ist, und das seit Anno dazumal.

Schau mal unter den Schlagworten SystemFiletime und Filetime nach, denn diese Funktionen kannst Du auch für Dic einsetzen. Vielleicht haben sie sich ein wenig in C# verändert, ich verlasse mich aber noch auf das API.

Gruß
Benny



Antwort 2 von Pumuckel

Eine Lösung - garantiert nicht die eleganteste :-(

Du fügst (falls noch nicht geschehen) das ActiveX-Element Kalender hinzu.
Dadurch wird die Klasse CCalendar mit den Memberfunktionen
  • int GetTag()
  • int GetMonat()
  • int GetJahr()
    eingebunden.
    Mit Hilfe einer neuen Member-Variablen m_Calendar vom Typ CCalendar kannst Du das Datum so
    int iCurrentTag = m_Calendar.GetTag();
    u.s.w. in int-Variablen ablegen.

    Das Datum der Dateien liest Du in 3 String-Variablen ein (z.B. CString sFileTag, sFileMonat, sFileJahr)
    Dann wandelst Du diese Strings in Integer:
    int iFileTag = atof(sFileTag);

    u.s.w.

    Dann brauchst Du nur noch eine Funktion schreiben, die die Integer vergleicht (Monatsübergänge evtl. mit if oder mit switch()/case: berücksichtigen).

    Evtl. wartest Du, bis SEMI ins SN schaut. Er hat bestimmt eine bessere Lösung!!

  • Antwort 3 von Michael (Sportwetten4u.de)

    warum so umständlich?

    Du willst doch ein Datumsvergleich?
    Convertiere den String, dein "Datumsstring", einfach in ein Datumsobjekt.

    Das kannst du dann problemlos über Operatoren mit dem aktuellen Datum vergleichen!



    Antwort 4 von BennyBeagle

    @Michael
    Vielleicht solltest Du ihm noch die Objekte nennen, damit er weiss, wo er suchen muss.
    Bei der MFC würde ich CTime und CTimeSpan einsetzen.

    @Pumuckel
    Was ist denn die Definition von elegant?
    Wenn Du Monatsübergänge in switch-Anweisungen untersuchst? Vergiss nicht Jahresübergänge und Schalttage im Februar. Naja - sind ja noch zwei Jahre bis 2004.

    Michaels Vorschlag ist sicherlich der eleganteste - solange man den Datumsvergleich im Auge hat. Ich persönlich bevorzuge in so einem Fall die mathematische Variante (jedes Datum in ein 64-Bit-integer umwandeln und speichern). Dann kann ich damit rauf und runterrechnen, sortieren ...

    Aber das ist Geschmacksache. Mit Objekten ist es jedenfalls die sauberste Lösung.

    Vielleicht noch ein Link zum Nachlesen für unseren Fragesteller:
    [URL]http://www.codeproject.com/datetime/datetimedisc.asp[/URL]

    Gruß
    Benny



    Ich möchte kostenlos eine Frage an die Mitglieder stellen:


    Suche in allen vorhandenen Beiträgen: