Erster und letzter Tag eines Monats anzeigen
-
Ich weiß selbst das der erste Tag immer der 1. ist. Mir gehts aber eher darum zu erkennen das es sich um den Monat August handelt. Ich brauch das für ein Programm das Statistiken erstellt. Durch klicken eines Buttons sollen nur werte aus einer Datenbank berücksichtigt werden die im aktuellen Monat erstellt wurden. Darum will ich wissen wie man anhand vom aktuellen Datum den ersten und letzten Tag ausliest.
Der Post von mir war nur ein Beispiel, damit es für jeden verständlich ist.
-
Brauchst du Nachhilfe, wieviele Tage welcher Monat hat?
31 Tage: Januar, März, Mai, Juli, August, Oktober, Dezember
30 Tage: April, Juni, September, November
28 Tage: Februar, aber bei Schaltjahr 29 Tage.
Du extrahierst aus dem aktuellen Datum den Monat und das Jahr.
Der erste Tag im Monat ist bisher immer der 1.
Der letzte Tag richtet sich nach dem Monat (s. o.)
Für Februar prüfst du das Jahr auf Schaltjahr
-
Warum sollte man das Schaltjahr von Hand berechnen?
DaysInAMonth ist eine Möglichkeit.
EDIT: DaysInMonth ist besser, da es mit TDateTime arbeitet.
-
Jetzt habe ich das so verstanden, daß du nicht weißt, wie du herausbekommst, daß wir heute August haben.
Schnelles Beispiel://Heutiges Datum ermitteln TDatum = DateToStr(Date()); //z. B. 08.01.01 DTag = TDatum; DTag.Delete (3, DTag.Length() - 2); WTag = StrToInt (DTag); TDatum.Delete (1, 3); // Tag abschneiden DMonat = TDatum; DMonat.Delete (3, DMonat.Length() - 2); WMonat = StrToInt (DMonat); TDatum.Delete (1,3); //Monat abschneiden if (TDatum.Length() == 2) TDatum = "20" + TDatum;
-
W. Posur schrieb:
Jetzt habe ich das so verstanden, daß du nicht weißt, wie du herausbekommst, daß wir heute August haben.
Schnelles Beispiel://Heutiges Datum ermitteln TDatum = DateToStr(Date()); //z. B. 08.01.01 DTag = TDatum; DTag.Delete (3, DTag.Length() - 2); WTag = StrToInt (DTag); TDatum.Delete (1, 3); // Tag abschneiden DMonat = TDatum; DMonat.Delete (3, DMonat.Length() - 2); WMonat = StrToInt (DMonat); TDatum.Delete (1,3); //Monat abschneiden if (TDatum.Length() == 2) TDatum = "20" + TDatum;OMG, wie umständlich.
Schon mal an DecodeDate() gedacht?
-
Fincki schrieb:
...
DaysInAMonth ist eine Möglichkeit.Solltest aber vielleicht auch darauf hinweisen, ab welcher Version diese Funktion vorhanden ist. Im CB 5 gibt es diese Funktion (und auch die zugehörige DateUtils- Unit) noch nicht.
Keine Ahnung, ob ab CB 6, aber beim BDS 2006 ist diese Unit dabei.
-
sowas in der art?
void __fastcall TForm1::Button1Click(TObject *Sender) { //DAteTime Objekt erstellen TDateTime* myDate = new TDateTime(); //Aktuelles Datum auslesen String myDateString = myDate->CurrentDate(); //Position des ersten Punktes ermitteln int monthPos = myDateString.Pos("."); //Monat extrahieren String month = myDateString.SubString(monthPos+1,2); //Jahr extrahieren String year = myDateString.SubString(7,4); String monthFirst,monthLast; monthFirst = "01"; //Welcher Monat?? switch(StrToInt(month)) { case 1: ; case 3: ; case 5: ; case 7: ; case 8: ; case 10: ; case 12: monthLast = "31"; break; case 2: ; //hab ich jetzt einfach mal bei 30 reingenommen case 4: ; case 6: ; case 9: ; case 11: monthLast = "30"; break; } //String zusammenbauen String lastText = monthLast + "." + month + "." + year; String firstText = monthFirst + "." + month + "." + year; Edit1->Text = firstText; Edit2->Text = lastText; }
-
Burkhi schrieb:
Fincki schrieb:
...
DaysInAMonth ist eine Möglichkeit.Solltest aber vielleicht auch darauf hinweisen, ab welcher Version diese Funktion vorhanden ist. Im CB 5 gibt es diese Funktion (und auch die zugehörige DateUtils- Unit) noch nicht.
Keine Ahnung, ob ab CB 6, aber beim BDS 2006 ist diese Unit dabei.Im BCB6 ist sie vorhanden, aber DaysInMonth ist noch besser.
-
DecodeDate ist natürlich kürzer und einfacher. Es ging ja nur um das Prinzip.
Die nützliche Funktion DaysInMonth und DaysInAMonth gibt es erst mit neueren Delphi und Builder Versionen. Mein Builder 5 hat sie jedenfalls noch nicht.
-
Am einfachsten so. Dann hast du das Datum so zerlegt wie du es brauchst.
String datum="15.11.2006"; TDate Tdatum=StrToDate(datum); unsigned short year,month,erster,letzter; Tdatum.DecodeDate(&year,&month,&erster); erster=1; letzter=DaysInAMonth(year,month);