Thema: Delphi Datumskonvertierung

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#11

AW: TimeStr im Format 'hh:mm:ss' in DateTime

  Alt 12. Jan 2017, 22:34
Warum ist im DateFormat ein Time-String drin?
Sei froh, dass Delphi beim Encodieren von Datums-/Zeitwerten so schrottig arbeitet, sonst hätte es dir diesen "kaputten" Datums-String um die Ohren geworfen.

Zitat:
If ( ((ord(InStr[i]) >= 48) and (ord(InStr[i]) <= 57 )) ) then
Wozu diese komische Obfuskation?
Delphi-Quellcode:
If (InStr[i] >= '0') and (InStr[i] <= '9') then

If CharInSet(InStr[i], ['0'..'9']) then //If InStr[i] in ['0'..'9'] then
Sinnlose Kommentare, ala // Zahlenbereiche auf Ziffern prüfen , könnte man sich dann auch sparen.


Zitat:
copy( FormatDateTime('dd.mm.yyyy hh:nn:ss', now) ,1,11 )
Ähhhhhhhhh?
FormatDateTime('dd.mm.yyyy ', now)

Zitat:
Delphi-Quellcode:
except
  ... mach hier irgendwelchen sinnlosen Scheiß, der die eigentliche Fehlermeldung zerstört ...
end;
oder
Delphi-Quellcode:
except
end;
Für sowas sollten Leute gesteinigt werden.

Kurz gefasst macht deine Funktion ausschließlich das:
Delphi-Quellcode:
function TimeStrToDateTime(InStr: String): TDateTime;
var
  i: Integer;
  fs: TFormatSettings;
begin
  for i := Length(InStr) downto 1 do
    if not CharInSet(InStr[i], ['0'..'9']) then
      InStr[i] := ':';
  fs.TimeSeparator := ':';
  //fs.ShortTimeFormat := 'hh:nn:ss'; // das ist sowieso egal, da die Delphi-Date/Time-Decodierungsfunktionen die Formatstrings fahrlässig ignorieren
  // und nur die richtigen Separatoren, sowie TimeAMString und TimePMString beachten

  //try
    Result := DateOf(Now) + StrToTime(Instr, fs);
  //except
  // Result := 666.000001; // ein unverständlicher krumer Wert ... warum nicht einfach 0?
  //end;
 end;
DateOf(Now) = Delphi-Referenz durchsuchenDate, aber jeder nutzt lieber Now.

Und in Wirklichkeit wolltest du wohl nur sowas machen?
Delphi-Quellcode:
function TimeStrToDateTime(InStr: String): TDateTime;
var
  fs: TFormatSettings;
begin
  fs.TimeSeparator := ':';
  InStr := ReplaceString(InStr, ' ', ''); // inkl. Trim
  InStr := ReplaceString(InStr, '/', ':'); // ein anderer bekannter TimeSeparator
  InStr := ReplaceString(InStr, '-', ':'); // ...
  Result := DateOf(Now) + StrToTime(Instr, fs);
end;
Wer "Dreck" eingibt, also z.B. irgendwelche falsche Zeichen/Buchstaben, der hat gefälligst mit der passenden Fehlermeldung zu rechnen, wo ihm gesagt wird, dass er Mist gebaut hat.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (12. Jan 2017 um 22:56 Uhr)
  Mit Zitat antworten Zitat