Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Datumskonvertierung (https://www.delphipraxis.net/94728-datumskonvertierung.html)

dose 26. Jun 2007 08:16


Datumskonvertierung
 
Hallo,
Ich verzeifel jetzt hier so langsam und wende mich vorher nochmal an euch:
Ich habe ein Datum in einem String im folgenden Format:
Zitat:

02-Jun-2008 01:59:00
11-Mar-2008 16:26:23
Jetzt müßte es doch eigentlich eine einfach Lösung geben, dieses Datum nach DateTime zu konvertieren, oder?
Gibt es sonst eine Routine, mit der ich mir ohne großen Aufwand dies nach DateTime wandeln kann, od. muß ich mit einer Monatsliste und diversen Copy-Funktionieren mir jedes Element raussuchen?

Danke
Gruß
dose

mkinzler 26. Jun 2007 08:21

Re: Datumskonvertierung
 
Nimm die überladene Version von StrToDateTime und übergebe das Format

Zitat:

Zitat von Delphi-Hilfe
Delphi-Quellcode:
function StrToDateTime(const S: string; var FormatSettings: TFormatSettings): TDateTime; overload;


dose 26. Jun 2007 08:54

Re: Datumskonvertierung
 
Hallo,
Irgendwie krieg ich's trotzdem nich hin. Es scheitert schon am Datum.
Irgendeinen Tip?


Delphi-Quellcode:
var
  formatSettings : TFormatSettings;

begin
  GetLocaleFormatSettings(1033, formatSettings);
//  ShowMessage (DateToStr(StrToDateTime('02-Jun-2008 01:59:00', formatSettings)));
    formatSettings.DateSeparator := '-';
    formatSettings.LongDateFormat := 'dd/mmm/yyyy';
   ShowMessage (DateToStr(StrToDateTime('02-Jun-2008', formatSettings)));
gruß
dose

mkinzler 26. Jun 2007 09:13

Re: Datumskonvertierung
 
Manuell zerlegen

Luckie 26. Jun 2007 09:18

Re: Datumskonvertierung
 
Irgendwie passen deine FormatSettings auch nicht zum Datum oder?
Delphi-Quellcode:
formatSettings.DateSeparator := '-';
formatSettings.LongDateFormat := 'dd/mmm/yyyy';
:gruebel:

dose 26. Jun 2007 09:28

Re: Datumskonvertierung
 
geht trotzdem nicht :-(

Luckie 26. Jun 2007 09:37

Re: Datumskonvertierung
 
Was für FormatSettings hast du denn jetzt genommen?

dose 26. Jun 2007 09:49

Re: Datumskonvertierung
 
Sowohl:
Delphi-Quellcode:
formatSettings.DateSeparator := '-';
formatSettings.LongDateFormat := 'dd-mmm-yyyy';
als auch

Delphi-Quellcode:
formatSettings.DateSeparator := '/';
formatSettings.LongDateFormat := 'dd/mmm/yyyy';
als auch

Delphi-Quellcode:
formatSettings.DateSeparator := '.';
formatSettings.LongDateFormat := 'dd.mm.yyyy';
(für nur 2 stelligen Monat)

marabu 27. Jun 2007 08:53

Re: Datumskonvertierung
 
Hallo,

auch wenn man für die Ausgabe eines Datums Monatsnamen verwenden kann, so ist doch der interne Parser bei der Umwandlung von Strings alleine auf Zahlenwerte ausgelegt - lediglich die Reihenfolge von DMY wird berücksichtigt.

Delphi-Quellcode:
function StrToDateTime(s: string; fs: TFormatSettings): TDateTime;
var
  i, m: Integer;
begin
  i := Pos('mmm', fs.ShortDateFormat);
  if i > 0 then
  begin
    m := {StrUtils.}AnsiIndexText(Copy(s, i, 3), ShortMonthNames);
    s := {StrUtils.}StuffString(s, i, 3, Format('%.2d', [m + Low(ShortMonthNames)]));
  end;
  Result := SysUtils.StrToDateTime(s, fs);
end;

procedure TDemoForm.ButtonClick(Sender: TObject);
var
  fs: TFormatSettings;
  s: string;
begin
  s := '02-Juni-2008 01:59:00';
  GetLocaleFormatSettings(GetUserDefaultLCID, fs);
  fs.DateSeparator := '-';
  fs.ShortDateFormat := 'dd/mmm/yyyy';
  ShowMessage(DateTimeToStr(StrToDateTime(s, fs), fs));
end;
Ist das Datumstrennzeichen ein Blank, dann ist vielleicht dieser Thread interessant: Datum-String in Datetime wandeln.

Grüße vom marabu

mschaefer 12. Jan 2017 20:41

TimeStr im Format 'hh:mm:ss' in DateTime
 
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:06 Uhr.
Seite 1 von 2  1 2      

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