Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Datum wird nach "FormatDateTime" falsch ausgegeben (https://www.delphipraxis.net/185895-datum-wird-nach-formatdatetime-falsch-ausgegeben.html)

DieFliege 16. Jul 2015 09:19

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:
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;
Anhang 43554

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.)

baumina 16. Jul 2015 09:27

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
In der Hilfe zu SysUtils.StrToDateTime steht eigentlich alles wichtige drin.

Der schöne Günther 16. Jul 2015 09:34

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
Toll. Ich habe mich grade mehrere Minuten durch den Quelltext gewühlt um den Hinweis auf http://docwiki.embarcadero.com/Libra...rCenturyWindow
zu finden. Hätte ich mal besser in die Hilfe geschaut :oops:

baumina 16. Jul 2015 09:40

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
Ja, F1 drücken kann auch jeder, das ist zu langweilig :lol:

frankyboy1974 16. Jul 2015 09:43

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

DieFliege 16. Jul 2015 09:51

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

mkinzler 16. Jul 2015 09:55

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
Zitat:

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?
Weil das so festgelegt wurde ( bis 64 -> 2000; ab 65 -> 1900)

Der schöne Günther 16. Jul 2015 09:57

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"

baumina 16. Jul 2015 09:59

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
F1 :duck:

Sir Rufo 16. Jul 2015 10:02

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
Für alle die die F1-Taste verlegt oder noch nicht gefunden haben
http://docwiki.embarcadero.com/Libra....StrToDateTime
Zitat:

Jahresangaben zwischen 0 und 99 werden mithilfe der globalen Variablen
Delphi-Quellcode:
TwoDigitYearCenturyWindow
konvertiert. Dieser Wert wird entweder in einer globalen Variablen (erste Form) oder als Feld des Parameters
Delphi-Quellcode:
AFormatSettings
(zweite Form) gespeichert. Weitere Informationen finden Sie unter "Formatvariablen für Datums-/Zeitangaben".

DieFliege 16. Jul 2015 10:34

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

DeddyH 16. Jul 2015 10:49

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
http://www.delphipraxis.net/dp_reference.php sollte auch mit dem Smartphone funktionieren, Internetverbindung vorausgesetzt.

p80286 16. Jul 2015 11:10

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

BadenPower 16. Jul 2015 11:37

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
Zitat:

Zitat von DieFliege (Beitrag 1308812)
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.

Warum benutzt Du nicht TMaskEdit statt TEdit?

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.

DieFliege 22. Jul 2015 14:53

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

baumina 22. Jul 2015 15:08

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.

BadenPower 22. Jul 2015 16:33

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
Zitat:

Zitat von DieFliege (Beitrag 1309541)
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,

Und was machst Du, wenn jemand gar kein Datum eingibt?

Zitat:

Zitat von DieFliege (Beitrag 1309541)
Sicherlich ist es eleganter zu lösen,

Ja, aber Du wolltest ja anscheinend keine Tipps, wie man das eleganter lösen könnte, weil solche Postings ja Deine Frage nicht beantworten.

p80286 22. Jul 2015 16:56

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
Der DateTimepicker ist hier eine nicht zu verachtende Alternative.

Gruß
K-H

DieFliege 22. Jul 2015 17:10

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
Zitat:

Zitat von p80286 (Beitrag 1309550)
Der DateTimepicker ist hier eine nicht zu verachtende Alternative.

Stimmt, funktioniert aber nicht bei "pastefromclipboard" und ist somit nicht Bestandteil meiner Frage gewesen. Dennoch werde ich prüfen, ob meine Lösung damit besser zu realisieren ist.

LG Micha


***** Da ich eine Lösung gefunden habe, bitte ich um Schließung des Themas um weitere Diskussionen zu vermeiden - Vielen Dank *****

mkinzler 23. Jul 2015 07:57

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
Zitat:

***** Da ich eine Lösung gefunden habe, bitte ich um Schließung des Themas um weitere Diskussionen zu vermeiden - Vielen Dank *****
Dann wäre es nett, wenn Du diese hier Nennen würdest.

BadenPower 23. Jul 2015 08:40

AW: Datum wird nach "FormatDateTime" falsch ausgegeben
 
Zitat:

Zitat von mkinzler (Beitrag 1309599)
Zitat:

***** Da ich eine Lösung gefunden habe, bitte ich um Schließung des Themas um weitere Diskussionen zu vermeiden - Vielen Dank *****
Dann wäre es nett, wenn Du diese hier Nennen würdest.

Hat er doch.

Zitat:

Zitat von DieFliege (Beitrag 1309541)
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.


DieFliege 23. Jul 2015 16:05

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:
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;
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.

Ich bedanke mich noch einmal für die entgegengebrachte Hilfe und wünsche allen ein schönes Wochenende.

LG Micha

Union 24. Jul 2015 10:39

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