Announcement

Collapse
No announcement yet.

Sekunden seit 1970

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Sekunden seit 1970

    In der Win32-API gibt's ein paar Stellen, an denen eine Zeit wie folgt
    angegeben wird: "This time is measured in the number of seconds elapsed
    since 00:00:00 January 1, 1970"
    Ich konnte leider keine Routinen in der API oder in Delphi finden, die
    aus diesem Format eines machen, das ich zu einer Stringdarstellung
    weiterverarbeiten kann (TDateTime, SYSTEMTIME, FILETIME oder so).
    Kann mir da jemand helfen?
    Vielen Dank im voraus,
    Uli.

  • #2
    in der Jedi Code Library (http://www.delphi-jedi.org) gibt es einige Convertierungsfunktionen für Datums/Zeitangaben.

    Selbst hab ich bisher im folgende Funktion verwendet

    <pre>
    function ConvertTimeTToDateTime(time_t: DWORD): TDateTime;
    var
    dwtemp : DWORD;
    time : TDateTime;
    begin
    dwtemp := time_t DIV cDaysSeconds; // Tage seit 1899
    time := dwTemp + cDaysOffset; // Offset 1899 -> 1970
    dwtemp := time_t MOD cDaysSeconds; // Uhrzeit
    time := time + dwtemp / cDaysSeconds; // Uhrzeit als Bruch
    result := time;
    end;

    wobei
    cDaysSeconds = 86400;
    cDaysOffset = 25569;
    </pre&gt

    Comment


    • #3
      Hallo,<br>
      schon mal folgendes probiert?<br>
      "FileTimeToSystemTime"<p>
      Gruß ah

      Comment


      • #4
        Danke!
        Uli.

        (Hätte ich eigentlich auch selber draufkommen können ;-)

        Comment


        • #5
          Hallo, Andreas!

          FileTimeToSystemTime geht leider nicht, weil das 1970er-Format weder
          SYSTEM- noch FILETIME ist (wenn ich es richtig verstanden habe).

          Alle anderen Routinen in der SDK-Hilfe passen leider auch nicht :-(

          Trotzdem danke,

          Uli

          Comment


          • #6
            <pre>

            function Convert(Value: DWord):TDateTime;
            begin
            Result := EncodeDate(1970, 1, 1) + Value / (60 * 60 * 24);
            end;

            </pre>

            That's all. Wir erzeugen erstmal das Datum für den 1.1.1970 und addieren dann die Tage + Bruchteile eines Tages drauf. Dazu rechnen wir das Sekunden-Datum in TDateTime(Tage.Bruchteile) um. Also einfach dividieren durch 60 Sekunden * 60 Minuten * 24 Stunden.

            Gruß Hage

            Comment


            • #7
              Guter Tipp Hagen,

              damit kann ich meine eigene Funktion aufräumen.
              Manchmal sieht man vor lauter Bäumen den Wald nicht mehr

              Comment


              • #8
                Diesen "Tipp" habe ich hier im Forum schon mindestens 1000'mal in irgendeiner Form gepostet, schade eigentlich

                Gruß Hage

                Comment


                • #9
                  Hallo, Hagen.
                  Bevor ich meine Frage gepostet habe, habe ich im Forum natürlich
                  nach Lösungen gesucht -- scheinbar aber mit den falschen Suchbegriffen.
                  Ich hab's jetzt nochmal ausprobiert: Mit Sachen wie "time convert" oder "TDateTime" finde ich zum aktuellen Thema bestenfalls diesen
                  Thread hier, und mit "1970" nicht einmal das (?!). Mach ich da
                  was grob falsch?

                  Uli

                  Comment


                  • #10
                    Nein. Das Forum gibts schon längere Zeit und viele Beiträge von vor paar Jahren sind nicht mehr vorhanden (war'n ne Menge). Es gab da mal noch einen Backup Ordner aber der ist jetzt auch weg

                    Gruß Hage

                    Comment


                    • #11
                      Anmerkung: "Ab 1.1.1970" ist die Unix-Zeit. Es wurde vor kurzem die magische Grenze von 1.000.000.000 Sekunden ueberschritten

                      Comment

                      Working...
                      X