AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Zeitstring 58:00 in ohne Überlauf in DateTime konvertieren
Thema durchsuchen
Ansicht
Themen-Optionen

Zeitstring 58:00 in ohne Überlauf in DateTime konvertieren

Ein Thema von messie · begonnen am 1. Aug 2006 · letzter Beitrag vom 1. Aug 2006
Antwort Antwort
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

Zeitstring 58:00 in ohne Überlauf in DateTime konvertieren

  Alt 1. Aug 2006, 16:11
Hallo,

ich habe zwei TMaskEdit, in die eine Zeit eingegeben wird (einmal Wartezeit sowie eine Ablaufzeit). Wenn ich ActTime := StrToDateTime(Mask.Text); eine Zeit von mehr als 24h gebe, gibt es eine Exception. Umgekehrt habe ich das Problem, daß FormatDateTime und andere beim Wandeln in einen String die Stunden abschneiden, die über 24h hinaus gehen.

Gibt es eine Lösung, die Formatierung so durchzuführen daß man auch mit DateTime > 1 arbeiten und das dann auch anzeigen kann?

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

Re: Zeitstring 58:00 in ohne Überlauf in DateTime konvertie

  Alt 1. Aug 2006, 16:19
DateTime ist nichts anderes als ein Float. Alle Werte größer 1 sind mit 24 Stunden (einem Tag) gleichzusetzen. Wenn Du also die Stunden brauchst, dann musst Du mit Delphi-Referenz durchsuchenTrunc den Wert größer/gleich 1 ermitteln und mit 24 multiplizieren.

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Zeitstring 58:00 in ohne Überlauf in DateTime konvertie

  Alt 1. Aug 2006, 16:51
Zitat von sakura:
DateTime ist nichts anderes als ein Float. Alle Werte größer 1 sind mit 24 Stunden (einem Tag) gleichzusetzen. Wenn Du also die Stunden brauchst, dann musst Du mit Delphi-Referenz durchsuchenTrunc den Wert größer/gleich 1 ermitteln und mit 24 multiplizieren.

......
...was aber bedeutet, daß ich die Konvertierungen zu Fuß aufbauen muß. Genau das wollte ich vermeiden.

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#4

Re: Zeitstring 58:00 in ohne Überlauf in DateTime konvertie

  Alt 1. Aug 2006, 16:59
Zitat von messie:
...was aber bedeutet, daß ich die Konvertierungen zu Fuß aufbauen muß. Genau das wollte ich vermeiden.
Oder Du machst die oben genannte einfach Umrechnung, was imo die sinnvollste Lösung ist, da Du den reinen Floatwert eh nie anzeigen wirst

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Zeitstring 58:00 in ohne Überlauf in DateTime konvertie

  Alt 1. Aug 2006, 17:04
Hallo,

"zu Fuss"

es wird dir nichts anderes übrig bleiben
als eine eigene Routine zu schreiben.

Das "zu Fuss" machst du ja nur einmal.

Heiko
Heiko
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#6

Re: Zeitstring 58:00 in ohne Überlauf in DateTime konvertie

  Alt 1. Aug 2006, 17:11
Zitat von hoika:
Hallo,

"zu Fuss"

es wird dir nichts anderes übrig bleiben
als eine eigene Routine zu schreiben.

Das "zu Fuss" machst du ja nur einmal.

Heiko
klar, ich hatte aber gehofft daß es vielleicht Aufrufkonventionen für die Standardfunktionen gibt, mit denen man das einstellen kann. In Excel beispielsweise gibt es eine auch Formatierung, die Stunden > 24 zuläßt.

Grüße, Messie
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#7

Re: Zeitstring 58:00 in ohne Überlauf in DateTime konvertie

  Alt 1. Aug 2006, 17:17
Zitat von messie:
klar, ich hatte aber gehofft daß es vielleicht Aufrufkonventionen für die Standardfunktionen gibt, mit denen man das einstellen kann. In Excel beispielsweise gibt es eine auch Formatierung, die Stunden > 24 zuläßt.
Diese Formatierung musst Du halt selbst machen, aber das ist ja nun nicht schwer, oder
Delphi-Quellcode:
uses
  DateUtils; // oder so ähnlich ;)

function ToHourMinuteString(dt: TDateTime): string;
var
  Hours, Minutes, Dummy: Word;
begin
  DecodeTime(Hours, Minutes, Dummy, Dummy);
  Result := Format('%d:%d', [Trunc(dt) * 24 + Hours, Minutes]);
end;
Es kann sein, dass die Parameter bei DecodeTime jetzt nicht stimmen, aber es gibt ja die Hilfe

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: Zeitstring 58:00 in ohne Überlauf in DateTime konvertie

  Alt 1. Aug 2006, 18:19
Hallo,

er wollte genau das Gegenteil String -> DateTime.
Übrigens kann DecodeTime auch nur Stunden bis 24.

Folgende Funktion hatte ich mir mal geschrieben.
Aber bitte nicht meckern, is elend lange her

Delphi-Quellcode:
function StrToTime_hhhmm(theTimeStr: String; var theDateTime: TDateTime): Boolean;
var
  Counter : Integer;
  Hours : Integer;
  ResultTime: TDateTime;
  bMinus : Boolean;
begin
  Result := False;
  theDateTime := 0.0;
  bMinus := False;

  try
    ResultTime:= 0.0;

    if Pos('-', theTimeStr)=1 then
    begin
      Delete(theTimeStr,1,1);
      bMinus:= True;
    end;

    {-- Die Stunden extrahieren--}
    {erstes Auftreten von : suchen}
    Counter:= Pos(':', theTimeStr)-1;

   {Stunden extrahieren }
    if Counter=-1 then
    begin
      Hours := StrToInt(theTimeStr);
      theTimeStr:= '';
    end
    else
    begin
      Hours := StrToInt(Copy(theTimeStr, 1, Counter));
      Delete(theTimeStr, 1, Counter); {Löscht hhh}
    end;

    {Stunden zu ResultTime addieren }
    while Hours >= 24 do
    begin
      ResultTime := ResultTime+1;
      Hours := Hours-24;
    end;

    {Stunden <24 zurückschreiben}
    if theTimeStr='then
    begin
      theTimeStr := IntToStr(Hours)+':00';
    end
    else
    begin
      theTimeStr := IntToStr(Hours)+theTimeStr;
    end;

    {RestString in DateTime umformen}
    ResultTime := ResultTime + StrToTime(theTimeStr);

    theDateTime:= ResultTime;

    if bMinus then theDateTime:= -theDateTime;

    Result:= True;
  except
    on Exception do;
  end;
end; { StrToTime_hhhmm }

Heiko

[edit=sakura] [delphi]-Tags Mfg, sakura[/edit]
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#9

Re: Zeitstring 58:00 in ohne Überlauf in DateTime konvertie

  Alt 1. Aug 2006, 18:21
@hoika: ich habe die Delphi-Tags eingefügt
Zitat von hoika:
er wollte genau das Gegenteil String -> DateTime.
Oops

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#10

Re: Zeitstring 58:00 in ohne Überlauf in DateTime konvertie

  Alt 1. Aug 2006, 18:30
Danke

Wieder was dazugelernt.
Das hatte bei entwickler.com nie so richtig funktioniert


Heiko
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:22 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