Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Zeitumwandlung (https://www.delphipraxis.net/185494-zeitumwandlung.html)

khh 16. Jun 2015 17:30

Delphi-Version: 5

Zeitumwandlung
 
hallo zusammen,

ich habe folgendes:
Delphi-Quellcode:
 arbeitszeit:= FormatDateTime('dd:hh:nn', zeit) ;
wobei in zeit 2.0000000029999998 steht
nach meinem Verständnis sollten das doch etwas mehr als 2 Tage sein, oder?

Warum bekomme ich dann in arbeitszeit : '01:00:00'

Ich danke euch

himitsu 16. Jun 2015 17:35

AW: Zeitumwandlung
 
Weil das der 2. Tag nach dem Start der Zeitrechnung des TDateTime ist?
Und das war halt der 01.01.1900 und 0,26 Millisekunden nach Mitternacht :roll:

0 = 30.12.1899

Mikkey 16. Jun 2015 17:37

AW: Zeitumwandlung
 
Weil das "dd" für Tage steht.

khh 16. Jun 2015 17:37

AW: Zeitumwandlung
 
ok, das leuchtet mir ein,
wie bekomme ich sonst die Stunden; Minuten in ein lesbares Format?

himitsu 16. Jun 2015 17:39

AW: Zeitumwandlung
 
Tage mit Trunc + IntToStr/Format und der Rest bleibt so.

Oder mit Magicwerten rechnen und +1. :stupid: (bei minimal 1 und maximal 31 Tagen)

DeddyH 16. Jun 2015 17:40

AW: Zeitumwandlung
 
Rechne Dir doch einfach aus, wieviele Stunden bzw. Minuten 2.0000000029999998 Tage sind.

BadenPower 16. Jun 2015 18:13

AW: Zeitumwandlung
 
Zitat:

Zitat von khh (Beitrag 1305317)
Delphi-Quellcode:
 arbeitszeit:= FormatDateTime('dd:hh:nn', zeit) ;
wobei in zeit 2.0000000029999998 steht
nach meinem Verständnis sollten das doch etwas mehr als 2 Tage sein, oder?

Warum bekomme ich dann in arbeitszeit : '01:00:00'

Das Du nicht das bekommst, was Du erwartet hast ist ein Verständnisproblem was die Funktion FormatDateTime eigentlich macht.

Die Funktion zeigt als Ausgabe einen Datumswert an und keine Zeitspanne.

Dies wäre Dir aufgefallen, wenn Du noch yyyy und mm usw. hinzugefügt hättest, Also so:

Delphi-Quellcode:
 arbeitszeit:= FormatDateTime('yyyy mm dd hh:nn:ss z', zeit) ;
Dann wäre als String

1900 01 01 00:00:00 0

herausgekommen.

Und bei diesem Wert wärst Du doch nie auf die Idee gekommen, das da jemand schon 1900 Jahre, 1 Monat und 1 Tag gearbeitet hätte.

Popov 16. Jun 2015 18:13

AW: Zeitumwandlung
 
Zitat:

Zitat von khh (Beitrag 1305321)
ok, das leuchtet mir ein,
wie bekomme ich sonst die Stunden; Minuten in ein lesbares Format?

Delphi-Quellcode:
var
  AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word;
  d, t: Double;
  dt: TDateTime;
begin
  dt := 2.0000000029999998;
  d := Trunc(dt);
  t := Trunc(Frac(dt) * 24 * 60 * 60 * 1000);

  AHour := Trunc(t / 60 / 60 / 1000);
  t := t - Trunc(AHour * 60 * 60 * 1000);
  AMinute := Trunc(t / 60 / 1000);
  t := t - Trunc(AMinute * 60 * 1000);
  ASecond := Trunc(t / 1000);
  t := t - Trunc(ASecond * 1000);
  AMilliSecond := Trunc(t);

  AHour := AHour + Trunc(d * 24); //Tage in Stunden umrechen und zu den Stunden dazugeben

  ShowMessageFmt('Stunden: %d; Minuten: %d; Sekunden: %d: Millisekunden: %d', [AHour, AMinute, ASecond, AMilliSecond]);
end;
oder

Delphi-Quellcode:
var
  AYear, AMonth, ADay, AHour, AMinute, ASecond, AMilliSecond: Word;
  dt: TDateTime;
begin
  dt := 2.0000000029999998;
  DecodeTime(dt, AHour, AMinute, ASecond, AMilliSecond);

  AHour := AHour + Trunc(dt * 24); //Tage in Stunden umrechen und zu den Stunden dazugeben

  ShowMessageFmt('Stunden: %d; Minuten: %d; Sekunden: %d: Millisekunden: %d', [AHour, AMinute, ASecond, AMilliSecond]);
end;

p80286 16. Jun 2015 18:34

AW: Zeitumwandlung
 
War Da nicht was?
Zitat:

Zitat von Dejan Vu (Beitrag 1304611)
Vor dem Komma steht nicht das Datum, sondern die Anzahl der Tage seid dem 30.12.1899. Und nach dem Komma steht keine Uhrzeit, sondern die seit Mitternacht vergangene Zeit als Bruchteil eines Tages.

in http://www.delphipraxis.net/185420-k...-funktion.html

Gruß
K-H

khh 17. Jun 2015 16:01

AW: Zeitumwandlung
 
ich danke euch, ihr seid einfach Spitze


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:19 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