Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String To Int/Time (https://www.delphipraxis.net/114098-string-int-time.html)

Stelo 19. Mai 2008 18:05


String To Int/Time
 
Hallo,
und zwar habe ich jetzt folgendes Problem.

Ich habe eine Uhrzeit als string gespeichert, die möchte ich mit einer andere Uhrzeit die als string gespeichert ist vergleichen - so weit kein Problem.

Nun ist es aber so, dass wenn z.B. uhrzeit1 + 1-29min = uhrzeit 2 eine fehlermeldung ausgegeben werden soll.
Doch wie krieg ich es nun hin, zu einem string die 29min hinzuzurechnen? bzw. kann ich den String iwie in Time oder Int umwandeln?

Danke für alle Ideen schon einmal! :)

Larsi 19. Mai 2008 18:06

Re: String To Int/Time
 
StrToInt macht einen String zu einer Integer Zahl.

mkinzler 19. Mai 2008 18:07

Re: String To Int/Time
 
Aber besser TryStrToInt() oder StrToIntDef()

pilic 19. Mai 2008 18:08

Re: String To Int/Time
 
StrToTime hört sich vielversprechend an :wink:

Stelo 19. Mai 2008 18:09

Re: String To Int/Time
 
Nun hab ich aber das Problem, dass 16:30 kein zugelassener Int-Wer ist ...

Was wäre denn dafür die beste Methode?
Das ':' löschen und dann plus 30 rechnen und das ':' wieder einfügen?
Doch was ist, wenn die Uhrzeit nun 16:50 ist und ich + 30min rechne, dann ist das ja keine Uhrzeit mehr!

EDIT: Bei StrToTime ... von welchem Datentyp muss dann die variable sein?

DeddyH 19. Mai 2008 18:11

Re: String To Int/Time
 
Welche Variable? Versuch mal TTime oder TDateTime.

mkinzler 19. Mai 2008 18:12

Re: String To Int/Time
 
Wiw wäre es mit TTime oder TDateTime ?

Stelo 19. Mai 2008 18:18

Re: String To Int/Time
 
Hach ... das ist gerade verwirrend. :oops:

Und wenn ich jetzt eine Variable vom Typ TTime habe, wie muss dann die Syntax aussehen, wenn ich eine zeit eingeben will?

zeit := '16:20';
und zeit := 16:20;
funktionieren nämlich nicht! :(

mkinzler 19. Mai 2008 18:20

Re: String To Int/Time
 
Delphi-Quellcode:
var
    zeit: TTime;
...
    zeit := StrToTime( '16:20:00');

shmia 19. Mai 2008 18:22

Re: String To Int/Time
 
Delphi-Quellcode:
const ONE_MINUTE = 1.0 / (24.0 * 60.0);
var
  Zeit, zeit2: TDateTime;
begin
  zeit := StrToTime('12:01:00');
  zeit2 := zeit + 29.0 * ONE_MINUTE; // 29 Minuten dazu
  ShowMessage(TimeToStr(zeit2));     // sollte 12:30:00 rauskommen

lbccaleb 19. Mai 2008 18:59

Re: String To Int/Time
 
schaue dir mal die unit: "dateutils" an, die sollte dir weiterhelfen können ;-)

Chemiker 19. Mai 2008 20:29

Re: String To Int/Time
 
Hallo Stelo,

Delphi-Quellcode:
Edit10.Text:= FormatDateTime('HH:NN', (StrToTime(Edit8.Text)+ StrToTime(Edit9.Text)));
In Edit8 23:59 eingeben
In Edit9 00:29 eingeben

Ergebnis in Edit10 = 00:28

Bis bald Chemiker

Stelo 19. Mai 2008 21:26

Re: String To Int/Time
 
Danke erst einmal für die vielen netten Antworten.

Das mit ONE_MINUTE funktioniert bei mir leider nicht! :(
"Undeclared indentifier"

Alles andere hat so weit geklappt.
Aber wie ist es denn, wenn ich in einer for schleife von 1 bis 29 die Uhrzeit je um eine Minute hochzählen möchte?
Denn wenn ich z.B. StrToTime('00:j:00') oder s.ä. verwende, dann funktioniert das ja dann bei 5 z.B. nicht, weil dann ja 05 da stehen müsste.
habt ihr vllt. eine Idee? :)

Matze 19. Mai 2008 21:29

Re: String To Int/Time
 
Zitat:

Zitat von Stelo
Das mit ONE_MINUTE funktioniert bei mir leider nicht! :(
"Undeclared indentifier"

Schau dir shmias Beitrag (#10) mal genau an. Dort steht doch:

Delphi-Quellcode:
const ONE_MINUTE = 1.0 / (24.0 * 60.0);

pilic 19. Mai 2008 21:31

Re: String To Int/Time
 
Delphi-Quellcode:
if j<10 then
  str:='0'+IntToStr(j);

Stelo 19. Mai 2008 21:44

Re: String To Int/Time
 
Also
StrToTime('00:str:00')
funktioniert leider überhaupt nicht! :(

Und ich habs auch versucht mit ...
if StrToTime(uhrzeit) = StrToTime(copy(zeile,1,pos(';',zeile)-1)) + j * ONE_MINUTE then
da gibt es zwar eine fehlermeldung, wenn es genau die gleiche Uhrzeit ist ... aber hochzählen tut es leider auch nicht! :(

mkinzler 19. Mai 2008 21:45

Re: String To Int/Time
 
str ist ja keine Zahl

Chemiker 19. Mai 2008 22:28

Re: String To Int/Time
 
Hallo Stelo,

oder so:

Delphi-Quellcode:
var
  min: Extended;
  UhrZeit: Extended;
  I: Integer;
begin
  min:= strToTime('00:01');
  for I := 0 to 61 do
  begin
    UhrZeit:= min*i;
    ShowMessage(FormatDateTime('HH:NN',UhrZeit));
  end;
end;
Bis bald Chemiker

lbccaleb 19. Mai 2008 22:43

Re: String To Int/Time
 
nochmal:

codiere alles in TDateTime und verwende dann die unit dateutils, mit dieser kannst du so ziemlich alles mit TDateTime machen....

edit:
und such mal in der delphi hilfe nach:
"Datetime routines" unglaublich was man dort alles findet ;-)

Stelo 19. Mai 2008 22:44

Re: String To Int/Time
 
Zitat:

Zitat von Chemiker
Hallo Stelo,

oder so:

Delphi-Quellcode:
var
  min: Extended;
  UhrZeit: Extended;
  I: Integer;
begin
  min:= strToTime('00:01');
  for I := 0 to 61 do
  begin
    UhrZeit:= min*i;
    ShowMessage(FormatDateTime('HH:NN',UhrZeit));
  end;
end;
Bis bald Chemiker

Danke für deine Antwort.
Es funktioniert aber leider trotzdem noch nicht so richtig.
Den ich will die Uhrzeit (also die Minutenzahl) ja nicht nur ausgeben, sondern zu .. eben z.B. 16:30 dazu rechnen. Und ich krieg das einfach nicht hin! O.o

Chemiker 19. Mai 2008 22:50

Re: String To Int/Time
 
Hallo Stelo,

steht doch alles schon in den Beiträgen:

Delphi-Quellcode:
var
  min: Extended;
  UhrZeit: Extended;
  AnfangsUhrZeit: Extended;
  I: Integer;
begin
  AnfangsUhrZeit:= strToTime('02:00');
  min:= strToTime('00:01');
  for I := 0 to 61 do
  begin
    UhrZeit:= AnfangsUhrZeit+(min*i);
    ShowMessage(FormatDateTime('HH:NN',UhrZeit));
  end;
end;
Bis bald Chemiker

Stelo 19. Mai 2008 22:57

Re: String To Int/Time
 
Ja schon klar.
Also mein Code sieht jetzt wie folgt aus:

Delphi-Quellcode:
min:= strToTime('00:01');
          for j:= 0 to 29 do
                begin
                  if StrToTime(uhrzeit) = StrToTime(copy(zeile,1,pos(';',zeile)-1)) + (min*j) then
                  begin
                    showmessage ('Zu dieser Zeit spielt bereits eine andere Band.');
                    abort;
                  end;
                end;
Nun kommt zwar meine Fehlermeldung, wenn ich genau die gleiche Zeit eingebe. Doch wenn meine Zeit denn 10min größer ist, meckert er komischer Weise nicht mehr rum! Oo

Seht ihr vllt. den Fehler?

Und Danke noch mal für die Hilfe.

lbccaleb 19. Mai 2008 23:04

Re: String To Int/Time
 
Delphi-Quellcode:
var
  TimeToAdd: TDateTime;
  NeueUhrzeit: String;
begin
  TimeToAdd := StrToTime(Edit1.Text);
// jetzt kannst du mit folgenden bsp zb sekunden min und so addieren (die 1 kann auch geändert werden zu 20 oder weiß ich was):

  TimeToAdd := IncMinute(TimeToAdd, 1); //addiert ne min
  TimeToAdd := IncHour(TimeToAdd, 1); //addiert ne stunde
  TimeToAdd := IncSecond(TimeToAdd, 1); //addiert ne sekunde
  TimeToAdd := IncMilliSecond(TimeToAdd, 1); //addiert ne millisekunde


//und dann noch alles wieder in einen string gewandelt:
  NeueUhrzeit := TimeToStr(TimeToAdd);

end;
so sollte es eigentlich gehen, nicht getestet!!

edit verständnis halber noch was geändert!!

Chemiker 19. Mai 2008 23:27

Re: String To Int/Time
 
Hallo Stelo,

Delphi-Quellcode:
StrToTime(copy(zeile,1,pos(';',zeile)-1))
Was kommt hier raus???

Bis bald Chemiker

Stelo 19. Mai 2008 23:44

Re: String To Int/Time
 
Zitat:

Zitat von Chemiker
Hallo Stelo,

Delphi-Quellcode:
StrToTime(copy(zeile,1,pos(';',zeile)-1))
Was kommt hier raus???

Bis bald Chemiker

Da haben wir den Fehler.
Das gibt irgend ein seltsames Datum aus, obwohl es ja eigtl. eine Uhrzeit ist. :cry:

mkinzler 20. Mai 2008 06:31

Re: String To Int/Time
 
Ein TDateTime besteht aus einem datum und einem Zeitwert. Es handelt sich um einen Double, bei dem vor dem komma das datum und nach dem Komma die Uhrzeit steht. Falls du den 31.12.1899 als Datum meinst, entspricht das dem Wert 0.

Stelo 20. Mai 2008 11:18

Re: String To Int/Time
 
Zitat:

Zitat von mkinzler
Ein TDateTime besteht aus einem datum und einem Zeitwert. Es handelt sich um einen Double, bei dem vor dem komma das datum und nach dem Komma die Uhrzeit steht. Falls du den 31.12.1899 als Datum meinst, entspricht das dem Wert 0.

achso ok, danke. Ich hab jetzt eine Variable vom Typ TTime genommen und es klappt.

Also d.h. dieser Teil funktioniert jetzt wieder:
StrToTime(uhrzeit) = StrToTime(copy(zeile,1,pos(';',zeile)-1))

Nur das mit dem x Minuten hochzählen will einfach nicht funktionieren.
IncMinute klappt bei mir irgendwie auch nicht (Undeclared indentifier). Hab ich etwas übersehen?

EDIT:
Um euch mein Problem noch mal genauer zu erklären (ich hatte vorher nämlich einen kleinen Denkfehler) erklär ich es eben noch mal ...

Und zwar ist es so, dass uhrzeit von dem Anwender eingegeben wird. zeile,1,pos(';',zeile)-1 ist eine in der TStringList gespeicherte Zeit. Nun sollen alle Zeiten, die in der TStringList gespeichert sind durchgegangen werden.
Doch da jede Band 29min spielen muss, muss die eingegeben Uhrzeit um 29min hochgezählt werden um festzustellen, dass nicht nach 15min schon eine andere Band spielen würde.
Ich hoffe ihr versteht jetzt mein Problem und findet den Fehler nun vllt. eher! :) Vielen Dank noch einmal für die Mühe.

lbccaleb 20. Mai 2008 12:03

Re: String To Int/Time
 
Zitat:

Zitat von Stelo
Nur das mit dem x Minuten hochzählen will einfach nicht funktionieren.
IncMinute klappt bei mir irgendwie auch nicht (Undeclared indentifier). Hab ich etwas übersehen?

ja bestimmt, du musst die unit "dateutils" unter uses einbinden!!

also so:


Delphi-Quellcode:
uses
  windows,
  sysutils,
  ...
  dateutils, //hier die dateutils eintragen, die reihenfolge ist dabei unwichtig, wo du sie einfügst!!
  forms;

Stelo 20. Mai 2008 12:08

Re: String To Int/Time
 
Vielen Dank, genau das war der fehler. :oops:

ich habe es jetzt wie folgt geschrieben:
Delphi-Quellcode:
if IncMinute(min, j) = StrToTime(copy(zeile,1,pos(';',zeile)-1)) then
Bei gleich Zeit wird wie gewollt die Fehlermeldung ausgegeben, doch wenn jetzt z.B. die gespeicherte Zeit 12:30 ist und ich 12:20 eingebe, wird zwar keine Fehlermeldung ausgegeben, aber es wird auch nichts gespeichert, also wird es anscheind doch abgebrochen. :gruebel: Das ist sehr seltsam.
Also, dass ist jetzt wirklich seltsam. Es funktioneirt jetzt, nur nicht, wenn sich um eine Uhrzeit in der 12 Stunde handelt.
Also mit 14:20 usw. kein Problem, nur bei 12:xx macht es Probleme! :shock:

lbccaleb 20. Mai 2008 12:18

Re: String To Int/Time
 
wie ich jetzt schon paar mal geschrieben hab, schaue dir mal GENAU die dateutils unit an, in der hast du sehr viele funktionen die dir das problem lösen!!!
und so wie du es gerade gemacht hast, würd ich es nicht machen, da es nicht nötig ist, den timestring noch mit pos und copy usw zu zerlegen und drinn umherzustückeln, dafür gibt es alles funktionen!!

Stelo 20. Mai 2008 12:28

Re: String To Int/Time
 
Zitat:

Zitat von lbccaleb
und so wie du es gerade gemacht hast, würd ich es nicht machen, da es nicht nötig ist, den timestring noch mit pos und copy usw zu zerlegen und drinn umherzustückeln, dafür gibt es alles funktionen!!

Ich zerstückel das doch nur, weil zeile am Anfang so aussieht:
23.05.2008;15:30;Anglerversammlung und da muss ich ja vorher die Uhrzeit "rausschneiden".


Ich habe jetzt mal die unit angesehen und es mit MinuteSpan() umgesetzt. Es scheint auch super zu funktionieren! :) Vielen Dank! ;)


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