AGB  ·  Datenschutz  ·  Impressum  







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

Datumskonvertierung

Ein Thema von dose · begonnen am 26. Jun 2007 · letzter Beitrag vom 12. Jan 2017
Antwort Antwort
Benutzerbild von mschaefer
mschaefer

Registriert seit: 4. Feb 2003
Ort: Hannover
2.032 Beiträge
 
Delphi 12 Athens
 
#1

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

  Alt 12. Jan 2017, 20:41
Hier könnte auch einer meiner Routinen noch hin passen. Habe Zeitangaben in
Editfeldern die vom String in ein DateTime Format gewandelt werden*sollen.

Delphi-Quellcode:
   // Wandelt einen TimeStr im Format 'hh:mm:ss' in ein DateTime von heute
   function TimeStrToDateTime( InStr : String ) : TDateTime;
   var I ,j : integer;
       LInstr : String;
       th,tm,ts : String;
       fs : TFormatSettings;
   begin
      // Zahlenbereiche auf Ziffern prüfen //
      j := 1; th :=''; tm :=''; ts:='';
      for i := 1 to Length(InStr) do
      begin
            If ( ((ord(InStr[i]) >= 48) and (ord(InStr[i]) <= 57 )) ) then
            begin
            case j of
             1 : th:=th+InStr[i];
             2 : tm:=tm+InStr[i];
             3 : ts:=ts+InStr[i];
            end;
            end else
            begin
               if InStr[i] <> #32 then j := j +1;
            end;
      end;

      // Mit aktuellem Datum zusammenführen im Format: 14.10.2003, 10:26:05
      LInstr := copy( FormatDateTime('dd.mm.yyyy hh:nn:ss', now) ,1,11 )
              + th + ':'
              + tm + ':'
              + ts ;
      LInstr := trim(LInstr);

      // Datums Zeit format festlegen
      fs.DateSeparator := '.';
      fs.TimeSeparator := ':';
      fs.ShortDateFormat := 'dd.mm.yyyy hh:nn:ss';

      // String in DatumsZeitFormat wandeln
      try
         Result := StrToDateTime( LInstr, fs );
      except
         Result := StrToDateTime('01.01.2000 00:00:01', fs );
      end;
   end;

begin

  showmessage( DateTimeToStr( TimeStrToDateTime( '15:30:10' )));

end;
Grüße // Martin
Martin Schaefer
Phaeno
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

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

  Alt 12. Jan 2017, 21: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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (12. Jan 2017 um 21:56 Uhr)
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#3

AW: Datumskonvertierung

  Alt 12. Jan 2017, 23:10
Reicht nicht eigentlich auch einfach nur ... StrToDateTime() ?
  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 05:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz