Frage zu TDateTime



  • problem, das das array durch eine vorgefertigte funktion erstellt wird und die gibt char zurück!

    das mit dem tdatetime hab ich mir auch schon angeschaut, geht das nur mit den Anzahl der Tage seit dem 30.12.1899!?

    hier mal ein auszug aus der hilfe!
    /*

    Der ganzzahlige Teil eines TDateTime-Wertes von Delphi entspricht der Anzahl der Tage seit dem 30.12.1899. Der fraktionale Teil des TDateTime-Wertes gibt die Tageszeit an.

    Es folgen einige Beispiele für TDateTime-Werte und die entsprechenden Datums- und Zeitangaben:

    0 30.12.1899 12.00 Uhr
    2.75 1.1.1900 18.00 Uhr
    -1.25 29.12.1899 6.00 Uhr
    35065 1.1.1996 12:00 am

    Wenn beide TDateTime-Werte positiv sind, brauchen Sie zur Ermittlung der Tage zwischen zwei Datumsangaben die beiden Werte nur voneinander zu subtrahieren. Um eine Datums-/Zeitangabe um eine bestimmte Anzahl von Tagen zu erhöhen, addieren Sie einfach die Anzahl zu dem TDateTime-Wert hinzu. */

    vieleicht hat ja auch jemand ein beispiel:)
    *voraus* 😃



  • Hallo

    Eine TDateTime-Instanz ist intern die Anzahl der Tage seit dem 30.12.1899.
    Die Differenz aus zwei Instanzen kannst du nun einfach berechnen :

    TDateTime a = ...;
    TDateTime b = ...;
    int tage = a - b;
    

    bis bald
    akari



  • hmmmmm....

    wie schreib ich das dann???

    TDateTime a = Array[];
    TDateTime b = *wie kann ich das heutige datum einfügen?*;
    int tage = a - b;

    sorry für die wahrscheinlich einfachen fragen aber irgendwie bekomm ich das nicht hin! 😡



  • Schau dir doch mal die Methoden von TDateTime an, z.B. CurrentDate(). Es gibt auch verschiedene Konstruktoren mit denen man Jahr,Monat,Tag usw angegeben kann.



  • ok das mit dem aktuellen datum hab ich hinbekommen:

    TDateTime *dt = new TDateTime();
    *dt = dt->CurrentDate();
    Edit6->Text = dt->DateString();

    aber wie mach ich das mit dem daysbetween?

    so soll das hier ausehen:
    function DaysBetween(const ANow: TDateTime; const AThen: TDateTime): Integer;

    kann mir jemand ein beispiel geben??!
    Datum 1 ist in einem char Array gespeichert
    datum 2 ist das aktuelle datum

    viele dank!



  • Hallo

    Warum hast du dir nicht mal den Code angeschaut, den ich dir schon gepostet habe?

    TDateTime a = ...;
    TDateTime b = TDateTime::CurrentDate();
    int tage = a - b;
    

    bis bald
    akari



  • ich hab noch bischen das internet durchforstet und bin auf diese lösung gefunden:

    String ausgabe;

    TDateTime dd=Now();

    ausgabe=dd.DateTimeString(); //heutiges Datum

    dd=DaysBetween (dd,1);

    Edit3->Text = dd.DateTimeString();

    Jetzt zeigt es mir nicht an wieviel tage es sind sondern welches datum vor einem tag war!
    wie kann ich das ändern? wenn ich z.b. dd=DaysBetween (dd,22.02.2000); eingebe sagt er zu viele kommastellen...

    😡 😡 😡



  • akari schrieb:

    Hallo

    Warum hast du dir nicht mal den Code angeschaut, den ich dir schon gepostet habe?

    TDateTime a = ...;
    TDateTime b = TDateTime::CurrentDate();
    int tage = a - b;
    

    bis bald
    akari

    ahh ich glaub ich habs kapiert!!!!

    geht das nur mit diesem vergleichsdatum 30.12.1899????



  • 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


Anmelden zum Antworten