AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme bei der Darstellung der Zeit

Ein Thema von MrReg · begonnen am 20. Jun 2007 · letzter Beitrag vom 20. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
MrReg

Registriert seit: 1. Jan 2006
8 Beiträge
 
Delphi 2005 Personal
 
#1

Probleme bei der Darstellung der Zeit

  Alt 20. Jun 2007, 14:44
Hallo Leute,

ich habe folgendes Problem: Ich versuche gerade ein Programm zu schreiben mit dem ich z.B. die Arbeitszeiten pro Woche, etc. errechnen kann. Die Woche besteht aus 6 Tagen (MO-SA). Zu jedem Tag gibt es 2 Editfelder. In das erste kommt die Anfangszeit rein, in das zweite die Zeit, wann man fertig war. Daraus errechne ich die Differenz, was dann der Arbeitszeit an einem tag entspricht.
Dies wird für alle 6 Tage gemacht. Am ende werden die Arbeitszeiten zusammengerechnet und in einem Label ausgegeben. Soweit klappt das ja auch schon ganz gut. Wenn ich aber z.B. 6-mal 6 Stunden habe, dann steht in dem label "12:00:00", weil Delphi nach 24 Std. wieder bei 0 anfängt.
Dies möchte ich aber gerne ändern. In Excel ist es möglich die Gesamtzeit in Stunden genau so anzeigen "36:00:00" zu lassen. Was muss ich jetzt tun, damit in meinem Label auch die Zeit folgendermaßen angezeigt wird: "36:00:00"???
Ich habe jetzt wirklich keine Ahnung mehr wie ich das hinkriege und hoffe, dass Ihr eine Idee habt.

Gruß
Philipp
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Probleme bei der Darstellung der Zeit

  Alt 20. Jun 2007, 14:48
du hast die addierten Zeiten doch sicher in einer Variable. Entweder sind sie in der Variablen schon falsch oder du gibst sie einfach falsch aus. Ohne Quelltext wissen wir nicht was von beiden der Fall ist.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
MrReg

Registriert seit: 1. Jan 2006
8 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Probleme bei der Darstellung der Zeit

  Alt 20. Jun 2007, 14:53
Danke für die schnelle Antwort.

Also klar habe ich die in eine Variable geschrieben. Die Werte sind auch alle korrekt. Werde gleich mal den Quelltext hochladen, aber sowiet habe ich keinen Fehler gefunden außer, dass Delphi nich tdie vollen 36 Std. anzeigt.
Philipp
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Probleme bei der Darstellung der Zeit

  Alt 20. Jun 2007, 14:58
naja, rechnest du im Moment mit TDateTimeWerten? TDateTime ist eben für Datumswerte und Zeitwerte ausgelegt. Die Zeit wird hinter dem Komma gespeichert und die Tage sind der Teil vor dem Komma.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
MrReg

Registriert seit: 1. Jan 2006
8 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Probleme bei der Darstellung der Zeit

  Alt 20. Jun 2007, 15:00
So, hier ist der Quelltext:

Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, mTSubtrahieren, mTAddieren, mTMultiplizieren,
  mTDividieren;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    Namensfeld: TEdit;
         ..... //Es wären sonst zu viele :-)
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  a,b,c,d,e,f : TTime;
begin
  a:=StrToTime(Edit3.Text+Label32.Caption+Edit4.Text)-StrToTime(Edit1.Text+Label31.Caption+Edit2.Text);
  b:=StrToTime(Edit7.Text+Label42.Caption+Edit8.Text)-StrToTime(Edit5.Text+Label41.Caption+Edit6.Text);
  c:=StrToTime(Edit11.Text+Label52.Caption+Edit12.Text)-StrToTime(Edit9.Text+Label51.Caption+Edit10.Text);
  d:=StrToTime(Edit15.Text+Label62.Caption+Edit16.Text)-StrToTime(Edit13.Text+Label61.Caption+Edit14.Text);
  e:=StrToTime(Edit19.Text+Label72.Caption+Edit20.Text)-StrToTime(Edit17.Text+Label71.Caption+Edit18.Text);
  f:=StrToTime(Edit23.Text+Label82.Caption+Edit24.Text)-StrToTime(Edit21.Text+Label81.Caption+Edit22.Text);
  Label21.Caption:=TimeToStr(a+b+c+d+e+f);
end;

end.
Dabei muss ich noch erwähnen, dass jew. das erste Editfeld die Std, das Label den ":" und das zweite Editfeld die Minuten in jeder Klammer darstellen.

[edit=SirThornberry]erneut Code-Tags durch Delphi-Tags ersetzt - künftig bitte Delphi-tags anstelle von Code-Tags verwenden wenn es um Delphiquelltext geht. Mfg, SirThornberry[/edit]
Philipp
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Probleme bei der Darstellung der Zeit

  Alt 20. Jun 2007, 15:09
genau das ist dein Fehler.
du verwendest ein TTime was das gleiche ist wie ein TDate und auch das gleiche wie ein TDateTime (was wiederum ein Double ist).

Der Typ ist also dazu gedacht Datum + Uhrzeit zu speichern. Dabei ist die Uhrzeit der Teil hinter dem Komma und die Tage der Teil vor dem Komma. 12 Stunden des Tages sind also 0,5.

wenn du jetzt 3 mal 12 Stunden hast wären das 3 mal 0,5 was 1,5 ergibt.

TimeToStr wandelt dir aber eben nur den Nachkommateil in eine Uhrzeit um. es wird also nur die ",5" beachtet was wieder 12 Uhr wäre. Du musst also zusätzlich den Teil vor dem Komma berücksichtigen.
Und du musst dir klar machen das es hier um Uhrzeiten + Datum geht und nicht um Stundenwerte.

wenn vor dem komma eine 0 steht ist das 30.12.1899
Wenn du nun 48 Stunden dazu addierst ist es immer noch 0 uhr aber eben 2 Tage später. Also der 01.01.1900
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
hoika

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

Re: Probleme bei der Darstellung der Zeit

  Alt 20. Jun 2007, 15:14
Hallo,

1. lass die Finger von TDateTime
ist ein Float ud damit gibt es Rundungsprobleme beim Addieren

2. wenn du es trotzdem nehmen willst (owe)

DateOf(TDateTime) -> Anzahl der Tage
Frac(TDateTime) -> Stunden (als TDateTime)

Anzahl der Tage mit 24 multipliziert ergibt die Stunden > 24 h

Ich hatte mit damals mal direkt ne Funktion geschrieben,
die obige beide Funktionen verknüpft.

TimeToStrEx ...


Heiko
Heiko
  Mit Zitat antworten Zitat
MrReg

Registriert seit: 1. Jan 2006
8 Beiträge
 
Delphi 2005 Personal
 
#8

Re: Probleme bei der Darstellung der Zeit

  Alt 20. Jun 2007, 15:21
Hallo hoika,

Wie würdest du die Werte denn dann errechnen und zusammenfassen. Könntest du mal einen Quelltext mit deiner Funktion posten, dann kann ich das auch besser nachvollziehen.

Gibt es auch noch andere vielleicht auch noch einfacher Methoden um dies zu erledigen?
Philipp
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: Probleme bei der Darstellung der Zeit

  Alt 20. Jun 2007, 15:26
Hallo,

es ist nichts verwerfliches am Datentyp TDateTime, man muss nur mit ihm umgehen können. Auch ist der ganzzahlige Anteil von TDateTime nicht ein Datum, sondern wird von bestimmten Routinen so interpretiert. TDateTime kann Zeitpunkte, aber auch Zeitspannen bezeichnen.

Delphi-Quellcode:
uses
  SysUtils, // TimeSeparator
  DateUtils; // HourOf, MinuteOf, SecondOf

function HoursToStr(timespan: TDateTime): string;
var
  hours, mins, secs: Word;
begin
  hours := HourOf(timespan) + 24 * Trunc(timespan);
  mins := MinuteOf(timespan);
  secs := SecondOf(timespan);
  Result := Format('%d%s%.2d%s%.2d', [hours, TimeSeparator, mins, TimeSeparator, secs]);
end;
Freundliche Grüße
  Mit Zitat antworten Zitat
Maja Jessica

Registriert seit: 16. Apr 2005
Ort: Dortmund
95 Beiträge
 
Delphi 4 Standard
 
#10

Re: Probleme bei der Darstellung der Zeit

  Alt 20. Jun 2007, 15:32
Hi,

kann mich dem nur anschliessen, bei TimeToStr etc gibt es ein paar Stolperfallen.

Zur Veranschaulichung kann man mal probieren:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var t,t1:ttime;
    std : double;
begin
  t := StrToTime('12:00');
  t1 := StrToTime('18:15');
  std := t1 - t;
  label1.caption := FloatToStr(std * 24);
end;
Lustig wird es, wenn du Zeiten berechnen musst wie z.B. von 22:00 bis 05:00, also über Mitternacht.

Nur so nebenbei,
f:=StrToTime(Edit23.Text+Label82.Caption+Edit24.Text) geht weniger umständlich mit
f:=StrToTime(Edit23.Text+':'+Edit24.Text) oder die Eingabe gleich in einem Edit und nur im richtigen Format hh:mm zulassen.

MJ
Ich glaub' ich bin zu alt für sowas ....
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:35 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