![]() |
Datum wird nach "FormatDateTime" falsch ausgegeben
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo Zusammen,
ich stehe mal wieder vor einem (vermutlich kleinem) Problem. Ich möchte ein Datum, was vom Benutzer eingegeben wird, in ein einheitliches Format umwandeln. Dazu nutze ich "FormatDateTime". Nun ist mir aufgefallen, wenn der Benutzer ein Datum vor dem 01.01.1965 eingibt, kann es zu einem Ausgabefehler kommen. Alle Daten ab dem 1.1.65 werden korrekt umformatiert. Beispiel: Eingabe: 1.1.1964 ===> Ausgabe 01.01.1964 Eingabe: 1.1.64 ===> Ausgabe 01.01.2064 Anhang 43553 Ich habe für die Umwandlung diesen Code verwendet:
Delphi-Quellcode:
Anhang 43554
procedure TForm1.Button1Click(Sender: TObject);
begin edit2.Text := FormatDateTime('dd.mm.yyyy', StrToDateTime(edit1.Text)); edit4.Text := FormatDateTime('dd.mm.yyyy', StrToDateTime(edit3.Text)); end; Der Fehler tritt nur auf, wenn das Datum vor dem 1.1.65 ist und wenn der Benutzer die Kurzform des Jahres angibt (62 statt 1962). Ab dem 1.1.65 ist es egal, ob das Jahr in Kurzform geschrieben wird oder nicht. Nun Meine Frage: Habe ich irgendwas vergessen oder übersehen und wie kann ich den Fehler Abfangen? Habt ihr einen Tipp für mich? Vielen Dank vorab. LG Micha (Ps.: verwende Delphi XE4 Prof.) |
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
In der Hilfe zu SysUtils.StrToDateTime steht eigentlich alles wichtige drin.
|
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Toll. Ich habe mich grade mehrere Minuten durch den Quelltext gewühlt um den Hinweis auf
![]() zu finden. Hätte ich mal besser in die Hilfe geschaut :oops: |
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Ja, F1 drücken kann auch jeder, das ist zu langweilig :lol:
|
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Hallo TE,
du lässt eine Information weg (sprich die Angabe der Jahrhunderte) und erwartest das Delphi dann auf das von dir gewünschte Ergebniss kommt. Ich persönlich hätte erwartet das strtodatetime('01.01.65') =>'01.01.0065' ergeben würde. Wenn ich eine Information weglasse, kann ich eigentlich nicht erwarten, das ein anderer diese Information richtig errät. Das kann funktionieren, muss es aber nicht. Aber die Erklärung findest du in der Delphi-Hilfe (siehe oben). mfg frank |
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Hallo Frank,
vielen Dank für Deine Rückmeldung. Aber wie erklärst Du mir, dass es ab dem Datum 1.1.65 funktioniert und bis 31.12.64 nicht, wenn der Benutzer das Jahrhundert weg lässt? LG Micha |
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Zitat:
|
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Ich glaube du hast bislang nicht richtig gelesen. Es gibt einen einstellbaren Wert ab wann er, bei weggelassenem Jahrhundert die Vergangenheit und wann die Zukunft annimmt. Der Standardwert ist 50 Jahre. Nächstes Jahr könntest du die Frage stellen warum es erst ab 1966 "funktioniert"
|
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
F1 :duck:
|
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Für alle die die F1-Taste verlegt oder noch nicht gefunden haben
![]() Zitat:
|
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Vielen Dank allen,
nun hab ich einen Ansatz, an dem ich weiter machen kann. F1 ist mit Smartphone schlecht, aber das konntet ihr nicht wissen. Wollte die Wartezeit am Bahnhof nutzen 😉 LG Micha |
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
![]() |
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Und die zwei Ziffern für Jahrtausend und Jahrhundert würden den Benutzer zu stark beanspruchen?
raten gehört nun mal nicht zu den besten Lösungen. Gruß K-H |
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Zitat:
Dann kann der User mit entsprechender Maske das Datum nur wie von Dir gewünscht eingeben. [EDIT] Oder gleich einen TDateTimePicker, dann sparst Du Dir auch die Validierung. |
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Hallo zusammen,
vielen Dank noch einmal für Eure Hilfe. Nach ein paar Tagen Urlaub habe ich eure Vorschläge berücksichtigt. Inzwischen konnte ich eine Lösung erarbeiten und damit mein Problem beheben. Zu meiner Lösung: Ich habe das eingegebene Datum (mit oder ohne "19-hundert") mit dem aktuellen Datum verglichen und geprüft ob dieses "größer" ist als das aktuelle. Sollte es größer sein, ziehe ich 100 ab, sonst nicht. Sicherlich ist es eleganter zu lösen, da ich das Datum aber anschließend im ISO-Format ausgeben möchte, kann ich das Datum "manuell" zusammen setzen und damit gut mit meiner Lösung leben. @p80286: Es ist nicht meine Frage gewesen, ob es für den Benutzer zumutbar ist, ein korrektes Datumsformat einzugeben. @BadenPower: Vielen Dank für Deinen Hinweis - dies werde ich mir einmal zu gegebener Zeit ansehen. Dennoch beantwortet Dein Posting nicht meine Frage. @DeddyH: Den Link habe ich geaddet - Vielen Dank dafür! @Sir Rufo: Danke Dir, damit konnte ich einen Lösungsweg finden. @baumina: *gähn* @mkinzler: Soetwas habe ich vermutet - Es war der erste Gedankenanstoß. Danke für den Hinweis. @frankyboy1974: Deine Aussage zum Thema Jahrhundert und "01.01.0065" ist falsch und war somit leider nicht hilfreich. Bisher wurden die Userfragen bei DP immer sehr freundlich beantwortet. Dies ist auch der Grund, warum ich mich hier angemeldet habe und auch meine Fragen hier gestellt habe. Leider scheint es auch hier langsam Mode zu werden, dass man erst einmal alles und jeden auf die "Hilfe" verweist. Dabei kann ich durchaus verstehen, dass es irgendwann mal lästig wird, wenn die Anfragenden weder die Suche noch die Hilfe nutzen und einfach mal ins blaue Posten um eine Lösung zu erhalten. Sollte ich diesen Eindruck vermittelt haben, bitte ich um Entschuldigung - Ich ziehe es vor, immer selbst eine Lösung zu finden und bitte daher immer nur um einen entsprechenden "Anstoß" zur Lösungsfindung. Ich verspreche zukünftig auch erst alle anderen Möglichkeiten zur Lösungsfindung zu nutzen, bevor ich das Forum befrage. In diesem Sinne wünsche ich einen schönen Mittwoch. LG Micha |
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Ich werde deinen Rat beherzigen und in Zukunft statt dem langweiligen Hinweis, dass alles in der Hilfe steht, gleich den Hilfetext, wie SirRufo es gemacht hat, hier reinkopieren. Da, wie man gesehen hat, nicht jeder immer Zugang zu den gesuchten Delphi-Hilfetexten besitzt.
|
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Zitat:
Zitat:
|
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Der DateTimepicker ist hier eine nicht zu verachtende Alternative.
Gruß K-H |
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Zitat:
LG Micha ***** Da ich eine Lösung gefunden habe, bitte ich um Schließung des Themas um weitere Diskussionen zu vermeiden - Vielen Dank ***** |
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Zitat:
|
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Zitat:
Zitat:
|
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
Noch einmal hallo zusammen.
Wunschgemäß führe ich hier einmal meine Funktion auf, mit der ich das Datum nun umstelle:
Delphi-Quellcode:
Sicherlich geht es noch kürzer, ich habe mir jedoch gedacht, lieber etwas ausführlicher schreiben um es auch später irgendwann mal wieder nachvollziehen zu können.
function ISODate(DateEU: String): String;
var datum_heute : Integer; ISO_jahr : String; EU_tag : String; EU_monat : String; EU_jahr : Integer; ISODatum : String; begin datum_heute := CurrentYear; EU_tag := FormatDateTime('dd', StrToDateTime(DateEU)); EU_monat := FormatDateTime('mm', StrToDateTime(DateEU)); EU_jahr := StrToInt(FormatDateTime('yyyy', StrToDateTime(DateEU))); if EU_jahr > datum_heute then EU_jahr := EU_jahr -100; ISO_jahr := IntToStr(EU_jahr); ISODatum := ISO_jahr + '-' + EU_monat + '-' + EU_tag; ISODate := ISODatum; end; Ich bedanke mich noch einmal für die entgegengebrachte Hilfe und wünsche allen ein schönes Wochenende. LG Micha |
AW: Datum wird nach "FormatDateTime" falsch ausgegeben
So wär's vielleicht besser:
Delphi-Quellcode:
function IsoDate(const DateEU : string) : TDateTime;
var LFs : TFormatSettings; begin LFs := TFormatSettings.Create; LFs.TwoDigitYearCenturyWindow := 99; Result := StrToDateTime(DateEU, LFs); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 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