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:
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 |
Re: Datumskonvertierung
Nimm die überladene Version von StrToDateTime und übergebe das Format
Zitat:
|
Re: Datumskonvertierung
Hallo,
Irgendwie krieg ich's trotzdem nich hin. Es scheitert schon am Datum. Irgendeinen Tip?
Delphi-Quellcode:
gruß
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))); dose |
Re: Datumskonvertierung
Manuell zerlegen
|
Re: Datumskonvertierung
Irgendwie passen deine FormatSettings auch nicht zum Datum oder?
Delphi-Quellcode:
:gruebel:
formatSettings.DateSeparator := '-';
formatSettings.LongDateFormat := 'dd/mmm/yyyy'; |
Re: Datumskonvertierung
geht trotzdem nicht :-(
|
Re: Datumskonvertierung
Was für FormatSettings hast du denn jetzt genommen?
|
Re: Datumskonvertierung
Sowohl:
Delphi-Quellcode:
als auch
formatSettings.DateSeparator := '-';
formatSettings.LongDateFormat := 'dd-mmm-yyyy';
Delphi-Quellcode:
als auch
formatSettings.DateSeparator := '/';
formatSettings.LongDateFormat := 'dd/mmm/yyyy';
Delphi-Quellcode:
(für nur 2 stelligen Monat)
formatSettings.DateSeparator := '.';
formatSettings.LongDateFormat := 'dd.mm.yyyy'; |
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:
Ist das Datumstrennzeichen ein Blank, dann ist vielleicht dieser Thread interessant: Datum-String in Datetime wandeln.
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; Grüße vom marabu |
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:
Grüße // Martin
// 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; |
AW: TimeStr im Format 'hh:mm:ss' in DateTime
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:
Delphi-Quellcode:
Sinnlose Kommentare, ala
If (InStr[i] >= '0') and (InStr[i] <= '9') then
If CharInSet(InStr[i], ['0'..'9']) then //If InStr[i] in ['0'..'9'] then
Delphi-Quellcode:
, könnte man sich dann auch sparen. :zwinker:
// Zahlenbereiche auf Ziffern prüfen
Zitat:
Delphi-Quellcode:
:roll:
FormatDateTime('dd.mm.yyyy ', now)
Zitat:
Delphi-Quellcode:
Für sowas sollten Leute gesteinigt werden.
except
end; 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;
Delphi-Quellcode:
= Date, aber jeder nutzt lieber Now.
DateOf(Now)
Und in Wirklichkeit wolltest du wohl nur sowas machen?
Delphi-Quellcode:
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.
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; |
AW: Datumskonvertierung
Reicht nicht eigentlich auch einfach nur ...
Delphi-Quellcode:
?
StrToDateTime()
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:04 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