Alter einer Datei abfragen



  • Das DateTime Format peil ich nichtmal annähernd

    Ist keine Frage

    Wie man auf den Zeitstempel der aktuellen Zeit kommt würde mir eigentlich dicke reichen.

    Das wurde dir nun schon mehrmals

    - durch meinen Link
    - durch Code hier gezeigt

    aber nun nochmal:

    TDateTime AktDatumUndUhrzeit=Now();
    

    Ich habe natürlich zuerst in die Hilfe geschaut,...

    Die Plätze für den Hellseherlehrgang sind leider schon alle weg gewesen. Ich kann, da du es nicht mitteilst, nicht wissen, was du gelesen, probiert, gemacht hast.

    Ich mache bissle mit PHP und da ist ein Timestamp ein INT.

    Nun machst du ein bissele im C/C++ und ist beipielsweise TDateTime ein double -> was ja in der Hilfe steht, die du ja gelesen hast, aber nicht nutzen willst?



  • Danke für den Link, aber wie ich schon erwähnte gibt es MinutesBetween scheinbar nicht in CBC5. Daher nutzt mir dein Link nicht wirklich etwas.
    Auch sagte ich das ich TDateTime nicht verstehe was es denn überhaupt zurückliefert. Der Timestamp den ich kenne sind Sekunden und damit lässt sich einfach rechnen. Hier kann ich aus dem double die in der Hilfe stehen garnix auslesen und wüsste demzufolge nicht was ich damit anfangen sollte.

    FloatToStr(Now() = 38815,4773687037

    Also was sollte mir der bisherige Text bringen? Im übrigen steht nirgends in der Hilfe das TDateTime ein double ist. Man kann es sich nur denken wenn man die oben genannten Beispielzeilen sich anschaut. Nichts destotrotz sagt einem das double garnix.

    Wenn du es verstehst, würde mich eine Aufklärung freuen.
    Finds aber schwach das FileAge ein integer Timestamp zurückgibt und es scheinbar kein integer Timestamp der aktuellen Zeit gibt.

    Hätte niemals gedacht das es so kompliziert ist an eine Lösung zu kommen. 😞



  • Verstehe das nicht: Du hast doch die Hilfe gelesen:

    Ein Aufruf ohne Argumente erzeugt ein TDateTime-Objekt, dessen Datenelement Val den Wert 0 hat. Diese Datums- und Uhrzeitangabe entspricht 30.12.1899 00:00.

    Wird im Aufruf für den Parameter src ein TDateTime-Objekt angegeben, wird eine Kopie von src (dem Kopierkonstruktor) erzeugt.

    Wird im Aufruf für den Parameter src ein TDateTimeBase-Objekt angegeben, hat das resultierende Objekt denselben Wert wie der Parameter src. TDateTimeBase ist die Basisklasse des Typs TDateTime. Sie enthält als einziges Element das als public deklarierte Feld Val, das den Wert des Objekts darstellt.

    Wird im Aufruf für den Parameter src ein double- oder Integerwert angegeben, hat das resultierende Objekt denselben Wert wie der Parameter src. Der ganzzahlige Anteil von src ist die Anzahl der Tage, die seit dem 30.12.1899 vergangen sind. Der Bruchteil gibt die Uhrzeit an.



  • Was verstehst du daran nicht, dass er einfach nur einen UNIX-Timestamp der momentanen Zeit haben will?



  • Willst du mich veräppeln oder was soll das werden?

    Ich suchte keine TDateTime Lösung, sondern einen integer Timestamp.
    Da FileAge einen solchen liefert, sollte es auch sowas für das aktuelle Datum geben.

    Deine Ersatzlösung mit einem anderen Weg mag ja nett gemeint sein, aber bringt nicht viel wenn die entsprechenden Funktionen fehlen.

    Der Hinweis auf die Hilfe ohne wirklich weiter was dazu zu sagen halte ich für absolut nutzlos, dann kann man den Beitrag sich auch stecken. Wer die Hilfe nicht liest hat Pech falls dort eine Lösung steht und falls nicht kann man davon ausgehen das derjenige damit nicht klarkam und es wird nicht besser indem man immer und immer wieder neu darauf verweist.

    Den netten Text den da so schön zitierst kenne ich nicht, ohne Quellenangabe auch schwer zu finden. Unter meiner TDateTime Hilfe steht er jedenfalls nicht und auch so sagt er mir garnix.

    Ich werde wohl weiter googlen müssen, der antwortet wenigstens in einer neutralen Art und nicht das man sich wie der letzte Sack vorkommt. 👎



  • Wie man an einen Zeitstempel kommt wurd doch nunmehrfach gepostet.

    Das es ein UNIX -Zeistempel sein soll (wozu eigentlich) kann ich so nicht erkennen.

    Da ich keine Lösung gepostet habe, liegt daran, dass ich den BCB 2006 nutze und ich keine Überblick habe, welche Funktionen nun auch 5er kompatibel sind.

    Des Weiteren kann er ja wohl kaum in die Hilfe geschaut haben, wenn der Eingangstext zu TDateTime "bei ihm nicht vorhanden ist"

    Jedenfalls würde er mit der Methode

    int FileDate ();
    

    der Klasse TDateTime

    einen int Wert im Betriebssystemformat bekommen -> was auchmit einem Blick in die Hilfe zu erkennen ist.



  • Hier geht es doch primär um den Vergleich 2er Datums/Zeitwerte. Es ist absolut unverständlich, dass das im UNIX Format passieren muss. Ein Vergleich ist mit TDateTime ebenso (einfach -> wie gezeigt) möglich. Ich kann nicht glauben, dass diese Funktionen erst im BCB 6 oder 2006 dazu gekommen sind.



  • Bei allem Respekt Staufenberg, aber ich muss Christian zustimmen. Dein Problem solltest du mit Hilfe der hier genannten Aspekte ohne weiteres lösen können und das ist ja schließlich das Ziel eines Threads hier.
    Jemand hat ein Problem und macht einen Thread auf und ein Anderer schenkt ihm Ansätze zur Lösung des Problems. Das hat Christian getan. Natürlich kannst du "deinen Weg" fordern, solltest aber auch andere Möglichkeiten würdigen und in betracht ziehen. Und auch ich denke, dass ein UNIX-Timestamp hier nicht notwendig ist.

    mfg cb



  • Wieso kommt ständig das "Verlgiechen" ? Ich sagte jetzt doch schon zwei mal das ich wissen will ob die Datei älter ist als 10Minuten. Wo ist das ein Vergleich? Das einfachste der Welt die differenz in Sekunden und fertig. Was ist daran unverständlich?

    Zu dem Rest sag ich nix mehr, das mir absolut zu doof was ihr hier abzieht.



  • Irgendwo wirst du doch mal - wie auch immer - programmiern müssen

    Wenn (Aktuelles_Datum-Datei_Datum > 10 Minuten)
    dann....

    Das ist ein Vergleich. Oder wie willst du dass sonst machen ohne Vergleich?



  • Staufenberg schrieb:

    Zu dem Rest sag ich nix mehr, das mir absolut zu doof was ihr hier abzieht.

    Gleich passiert dir hier das gleiche wie deinem Namensvetter im Juli '44.

    Was ist daran so schwer ?

    int fileDate=FileAge(filename);
    int sec = SecondsBetween(Now(),FileDateToDateTime(fileDate));
    


  • Ups übersehen. Du verwendest ja den Oldie Nr.5 😃



  • Christian211 schrieb:

    Wenn (Aktuelles_Datum-Datei_Datum > 10 Minuten)

    Ja und was sind nun 10min in TDateTime Format?

    @hellic
    Namensähnlichkeiten waren nicht beabsichtigt! Und warum mir? Bisher bekomme ich nur "lies die Hilfe" und Funktionen die mein Compiler nicht kennt. Über die zynischen herablassenden Kommentare mal nebensächlich. Ist Internet und manches kann man da einfach falsch verstehen.

    Aber soviele Beiträge ohne mal ein konkretes Beispiel, wo man es doch soviel schlauer weiss........................

    Hat keiner eine Ahnung wie man das aktuelle Datum in DOS Timestamp bekommt? 😮



  • du kannst die Differenz von "Hand" in etwa so berechnen.

    int fileDate=FileAge(fileName);
    int dif = (TDateTime(Now()-FileDateToDateTime(fileDate)).Val*24*60*60);
    int days,hours,min,sec;
    sec=dif%60;
    dif-=sec;
    dif/=60;
    min=dif%60;
    dif-=min;
    dif/=60;
    hours=dif%24;
    dif-=hours;
    dif/=24;
    days=dif;
    

    Beim BCB6 gibt es DateTimeToUnix aus den DateUtils um vom TDateTime einen Unix-Timestamp zu bekommen. Keine Ahnung ob es das schon beim 5er gab.



  • Aber für dein Problem mit den 10 Minuten reicht das hier:

    int fileDate=FileAge(fileName);
    int sec=TDateTime(Now()-FileDateToDateTime(fileDate)).Val*24*60*60;
    if(sec>600) Label1->Caption = "Datei älter als 10 Minuten";
    else Label1->Caption = "Datei noch keine 10 Minuten";
    


  • Ahhh, jetzt raff ich das mit Val. Bin total auf nen Sekunden Timestamp fixiert gewesen. Leider ist Val auch nirgendswo dokumentiert ausser direkt in der Beschreibung kurz. Aber da wurd ich net schlau draus wie dieser anzuwenden sei.. Vielen Dank!!, jetzt hab ich es auch verstanden. Schade das die VCL Funktionen fehlen. Würde ja nen Upgrade von BCB5pro auf 2006 machen wollen, aber habe angst das dann viele Delphi Komponenten nicht mehr laufen werden. 🤡



  • hellic schrieb:

    Beim BCB6 gibt es DateTimeToUnix aus den DateUtils um vom TDateTime einen Unix-Timestamp zu bekommen. Keine Ahnung ob es das schon beim 5er gab.

    Gibt es leider nicht und ich brauch es gerade auch. 🙄
    Gibt es eine Möglichkeit dies nach zu rüsten und natürlich auch die Funktion UnixToDateTime()?


Anmelden zum Antworten