Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie wandle ich mikrosekunden in eine Zeit um? (https://www.delphipraxis.net/190394-wie-wandle-ich-mikrosekunden-eine-zeit-um.html)

BBoy 29. Sep 2016 16:31

Delphi-Version: 10 Seattle

Wie wandle ich mikrosekunden in eine Zeit um?
 
Ich bekomme von einem Server eine Timestamp in Mikrosekunden zurück und möchte diese nun in Stunden: Minuten umwandeln und die Differenz zu der jetzigen Zeit berechnen.

Hat jemand eine Idee wie man so etwas programmiert?

Aviator 29. Sep 2016 16:37

AW: Wie wandle ich mikrosekunden in eine Zeit um?
 
Schau mal bei den Delphi-Referenz durchsuchenDateUtils nach. Ob da genau für den Fall jetzt was dabei ist weiß ich gerade nicht auswendig. Zur Not kann man so etwas auch recht schnell selbst programmieren.

EDIT: Gerade erst nochmal vollständig gelesen. Um die Zeit zwischen TimeStamp und Now zu berechnen gibt es auf jeden Fall diverse Funktionen wie z.B. MinutesBetween, SecondsBetween, HoursBetween, usw.

BBoy 29. Sep 2016 16:45

AW: Wie wandle ich mikrosekunden in eine Zeit um?
 
Für Mikrosekunden habe ich nichts in Delphi gefunden auch nicht in DateUtils.

Diese Seite berechnet das Perfekt: http://www.timestampconvert.com/

Der schöne Günther 29. Sep 2016 16:48

AW: Wie wandle ich mikrosekunden in eine Zeit um?
 
Warum nicht einfach eine
Delphi-Quellcode:
TTimeSpan
? Die ist genau für so etwas gedacht.
Delphi-Quellcode:
uses System.TimeSpan;

const
   myMicroseconds: Int64 = 123456789123;
var
   timeSpan: TTimeSpan;
begin
   timeSpan := TTimeSpan.Create(myMicroseconds * 10); // Ein "Tick" ist eine Zehntel-Mikrosekunde
   WriteLn('Es sind ', timeSpan.Hours, ' Stunden und ', timeSpan.Minutes, ' Minuten');
   readln;
end.

himitsu 29. Sep 2016 17:28

AW: Wie wandle ich mikrosekunden in eine Zeit um?
 
DateUtils hat nur Funktionen, die mit TDateTime arbeiten, bzw. nur von diesem ausgehend.
Und paar wenige Funktion zur Konvertierung, aber da nur von und nach anderen "Datums"-Formaten (UnixTimeStamp und JulianDate)

Viele Date-Funktionen verstecken sich immernoch in der SysDtils.


Aber wenn man nachliest, wie der Typ TDateTime definiert ist, dann kann man sowas auch selber umrechnen.
Vor dem Komma die Tage und danach der Anteil des Tages.

Und dann gibt es auch nette Konstanten, zum umrechnen, ala HoursPerDay, MinsPerDay, SecsPerDay, MSecsPerDay oder OneHour, OneMinute, OneSecond und OneMillisecond.

Delphi-Quellcode:
DateTime := (myMicroseconds / 1000 * OneMillisecond);

DateTime := Now - (myMicroseconds / 1000 * OneMillisecond);

usw.

Zitat:

Zitat von BBoy (Beitrag 1349227)
Ich bekomme von einem Server eine Timestamp in Mikrosekunden zurück und möchte diese nun in Stunden: Minuten umwandeln und die Differenz zu der jetzigen Zeit berechnen

Timestamp?

Eine "Dauer" oder doch ein "Zeitstempel" ?

http://www.unixtimestamp.com/
Vielleicht sowas wie ein "zu genauer Unix-TimeStamp" ... in Sekunden umgerechnet würde es dann Delphi-Referenz durchsuchenUnixToDateTime geben
und mit DaySpan HourSpan MinuteSpan SecondSpan oder DaysBetween MinutesBetween SecondsBetween MilliSecondsBetween, zusammen mit Now wäre dann die Differenz.

BBoy 30. Sep 2016 15:01

AW: Wie wandle ich mikrosekunden in eine Zeit um?
 
Ich habe 1475066323000 und das ist ein komplettes Datum das aber in meinem Fall immer nur max. 30 Minuten vom jetzigen entfernt ist.

Dein Beispiel
Code:
DateTime := (myMicroseconds / 1000 * OneMillisecond);

DateTime := Now - (myMicroseconds / 1000 * OneMillisecond);
funktioniert bei mir nicht. Was soll man denn für OneMillisecond eingeben? Für myMicroseconds habe ich meinen wert 1475066323000 verwendet.

Uwe Raabe 30. Sep 2016 15:18

AW: Wie wandle ich mikrosekunden in eine Zeit um?
 
Zitat:

Zitat von BBoy (Beitrag 1349369)
Was soll man denn für OneMillisecond eingeben?

Delphi-Quellcode:
MSecsPerDay
(aus Sysutils)

Aber dann wäre die Formel auch falsch. So sollte es dann gehen:
Delphi-Quellcode:
DateTime := myMicroseconds / 1000 / MSecsPerDay;


myMicroSeconds/1000 wandelt in Millisekunden um, das nochmal durch MSecsPerDay dividiert ergibt Tag, was wiederum die Einheit für TDateTime ist.

DeddyH 30. Sep 2016 15:31

AW: Wie wandle ich mikrosekunden in eine Zeit um?
 
Oder auch so:
Delphi-Quellcode:
const
  MicroSecsPerDay = MSecsPerDay * 1000;

DateTime := myMicroseconds / MicroSecsPerDay;

BBoy 30. Sep 2016 20:14

AW: Wie wandle ich mikrosekunden in eine Zeit um?
 
Danke euch allen! :thumb:
Da waren einige richtige Ansätze dabei. Und endlich habe ich es kapiert :-D

himitsu 30. Sep 2016 21:53

AW: Wie wandle ich mikrosekunden in eine Zeit um?
 
Delphi-Referenz durchsuchenOneMillisecond ist eine neue Konstante in DateUtils und der reziproke Wert von Delphi-Referenz durchsuchenMSecsPerDay.

Also eigentlich eine sinnlos doppelte Konstante, aber halt ob man lieber Multipliziert oder Dividiert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:40 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz