Frage zu TDateTime



  • Offensichlich noch nicht ganz kapiert. 😉

    Du kannst jedes Datum mit jedem vergleichen. Du musst nur noch einen Weg finden, aus dem char-Array ein TDateTime zu machen. Ich würde dazu das char-Array in einen AnsiString kopieren und daraus mittels AnsiString::SubString() die jeweils relevanten Teile rauskopieren und mittels AnsiString::ToIntDef() in int-Werte für Tag, Monat und Jahr wandeln. Darauf kannst du dann notfalls noch eine Plausibilitätsprüfung anwenden und daraus das TDateTime erzeugen.

    Gruß KK



  • hmmm sorry aber ich komm da nicht mit...:(

    hast du da nicht ein bsp?! bin kurz vorm verzweifeln und hab schon fast das ganze internet durchsucht 😞



  • Was genau ist denn das Problem? Die Verwendung von TDateTime oder das Ermitteln der Werte aus dem CString?



  • kann man in das tdatetime auch ein datum direkt "reinschreiben" (c.b. 22.03.2010) oder geht das nur mit der tagesdifferenz zu dem vergleichsdatum(1899...)

    verstehst du was ich meine?



  • Hallo

    Wie witte schon geschrieben hat, dafür gibt es Konstruktoren

    TDateTime x = TDateTime(2010, 03, 22);
    

    bis bald
    akari



  • jaaaaaaaaaaaaaa genau sowas hab ich gesucht!!! danke.... so einfach kann die lösung sein ich teste das ganze mal!!! 👍 👍 👍 🤡



  • ok funktioniert soweit!

    gibt es jetzt die möglichkeit, das datum aus einem char array zusammen zustellen?!

    ich dachte da an soetwas:

    array[0-3]=x;
    array[4-5]=y;
    array[6-7]=z;

    TDateTime x = TDateTime(x, y, z);

    sieht kommisch aus ich weiß...:)



  • Hallo

    Mit String::SubString (und eventuell String::Pos) kannst du das ungefähr so umsetzen, wie du es gezeigt hast.

    Einfacher aber dürfte der TDateTime-Konstruktor für AnsiString sein, der dann selber ide Konvertierung versucht :

    Wenn Sie die Methode mit einem AnsiString-Wert als src-Parameter und einem TDateTimeFlag-Objekt als flag-Parameter aufrufen, wird der Wert des resultierenden Objekts aus dem AnsiString-Wert konvertiert. Der Parameter flag gibt an, ob der String ein Datum, eine Uhrzeit oder beides enthält. Die Voreinstellung für flag ist DateTime.

    bis bald
    akari



  • hmmm tut mir leid aber das ist für mich etwas zu viel des guten:( bin leider kein informatiker und wie bereits erwähnt absoluter anfänger!

    wie soll das genau funktionieren?!

    String::SubString??? muss ich hier mein array angeben?!

    zu TDateTime-Konstruktor hab ich nix in der hilfe gefunden

    😕 😕 😕



  • Was ein Konstruktor ist, weißt du aber schon, oder?!? Wenn ja, schau einfach´bei TDateTime und String, welche es da gibt, wenn nicht, ist es viel zu früh, sich mit der VCL zu befassen...



  • öhmmm ich glaube wir reden da gerade aneinander vorbei...

    ich programmiere mit borland builder eine gui mit c++... glaub das hat mit vcl nix zu tun....
    ich glaub ich bin dann mal im falschen thread oder?!? bin gerade etwas überfordert....

    HILFE:(



  • Hallo

    Wenn du im Builder eine GUI mit C++ programmierst, dann arbeitest du auf jedenfall mit der VCL (Visual Component Library). Denn das ist der Name des Frameworks, das vom Builder benutzt wird.
    Und auch ich empfehle dir dringend, erstmal die Grundlagen der Sprache C++ zu lernen (z.B. Konstruktoren), bevor du versuchst (egal womit) GUI-Programme zu schreiben.
    Denn dann würdest du selber drauf kommen, das ich nicht mehr gemeint habe als :

    TDateTime x = TDateTime("10.12.2010");
    

    (Nachteil : das erlaubte Format ist von den Lokalisierungseinstellungen von Windows und der VCL abhängig)

    bis bald
    akari



  • Nein, Du bist schon im richtigen Forum. 😉
    VCL = Visual Component Library, das ist das Framework, mit dem im BCB die WinAPI gekapselt wird. Aber da sollte man sich tatsächlich nur rantrauen, wenn man fundierte C++-Kenntnisse hat.

    Also nochmal Du hast einen CString, den Du in ein TDateTime konvertieren möchtest. Dazu gibt es verschiedene Möglichkeiten (deswegen wirf einen Blick in die Hilfe zu den Konstruktoren von TDateTime und AnsiString oder String (bei Unicode-fähigen BCB-Versionen ist wohl String zu bevorzugen). In meinem BCB 6 verwende ich ausschließlich AnsiString.

    Prinzipiell kannst Du entweder aus dem CString die Zahlenwerte ermitteln, oder eben die fehlenden Punkte einfügen. Für beides gibt es bei TDateTime Konstruktoren. Der Schritt über AnsiString/String ist obligatorisch, da es das Auslesen der Zahlen, bzw. das Einfügen der Punkte deutlich erleichtert.

    Wobei hast Du denn nun noch Schwierigkeiten?
    (Wir sind hier böse. 😉 Wir geben lieber Hilfe zur Selbsthilfe. Dabei lernst Du dann nämlich tatsächlich was.)



  • guten abend

    nach einem kleinem mittagsschlaf und etwas nachdenken bin ich zu folgedem ergebnis gekommen:

    while (iLen1<10)
    	{
    		ComWrite(COM8,Array1,48);   
                                    //ich lese hier über den comport aus
    		Edit5->Text = Array1;  
                                    //im Array1 habe ich einen befehl stehen der
                                      das auslesen ermöglicht
    
    		Sleep(200)  ;
    		iLen1=ComRead(COM8,dBuffer1,64);
    	}
    	int p=0;                //da, die antwort nicht nur das benötigte datum 
                                    //ist sondern folgendes format hat: 
                                    //ack,1,6,23032009#crc fang ich erst an ab 
                                    //stelle 6 zu lesen
    	for(int o =6; o<14;o++)      
    	{                                           
    
    Reginhaltx=Reginhaltx+ dBuffer1[o];					
    if(o==7 || o==9){ Reginhaltx=Reginhaltx+ ".";}
                                                //"." an passende stelle einfügen
    p++;
    	}
    
    	StrToDate(Reginhaltx);  // umwandeln
    
    	int v= ((TDate)Reginhaltx-Today());    
                                                //Differenz zwischen  Ausgelesenem 
                                                //Datum und dem aktuellen berechnen
                                                //und anschliesend auswahl treffen
    
    	if ( v<=0) {
    	ShowMessage("Abgelaufen");
    	Form2->Edit3->Color = clRed;
    
    	}
    	else if (v>0 && v<=3) {
    	ShowMessage("Bald Aufbrauchen");
    	Form2->Edit3->Color = clYellow;
    
    	}
    	else if (v>3) {
    	ShowMessage("Haltbar");
    	Form2->Edit3->Color = clGreen;
    
    	}
    
    	Form2->Edit3->Text =  DaysBetween(Reginhaltx,Today());  //Ausgeben
    	Form2->Edit2->Text =  Reginhaltx;
    

    Wenn ihr euch jetzt verständlicherweise fragt, was ich da programmiere möchte ich euch natürlich noch aufklären.
    es ist ein schulprojekt, bei dem ein kühlschrank über an verschiedenen produkten angebrachten rfid chips erkennen soll wann das produkt abläuft!!!

    vielen dank für die hilfe, das mit dem datum klappt mal soweit:)

    aber freut euch nicht zu früh, ich hab sicher noch einiges was ich euch fragen muss!!!! 😋 😋
    /Edit akari : Bitte Code-Tags benutzen


Anmelden zum Antworten