AnsiString nach TDateTime (nicht so wie in der FAQ ;)
-
Hallo
ich stehe vor dem Problem einen AnsiString in ein TDateTime zu verwandeln. In der FAQ wird da ja die einfache Methode beschrieben, einfach den Konstruktor von TDateTime passend aufzurufen.
Mein Problem ist aber, das dieser Datumsstring in einem beliebigen Format vorliegen kann, also z.B. YYYY-MM (meistens war im englischen Datumsformat, aber das ist nicht die Regel). Der Konstruktor von TDateTime oder auch StrToDateTime erwarten, dass der Datumsstring im Format des im Betriebssystem eingestellten Locale vorliegt.
ich bräuchte also sowas wie
AnsiString myString = FormatDateTime(AnsiString("dd.mm.yyyy hh:nn:ss"), ....);
nur umgekehrt.
-
Ich bezweifle, dass es eine fertige Funktion gibt, die quasi-beliebige Datumsformate automatisch wandeln kann.
Da wirst du den eingehenden String wohl selbst parsen und passend umbauen müssen, bevor du ihn an TDateTime übergibst. Auf jeden Fall solltest du dir die Liste der verschiedenen Konstruktoren von TDateTime anschauen, um den für dich günstigsten Ansatz zu finden.
-
Ich sehe das Problem eher darin, zu bestimmen, was Tag oder Monat sein soll. Und falls die Jahresangabe dann noch zweistellig ist...
-
Zu Bestimmen was Tag und Monat sein soll ist kein Problem. Ich weiss immer in welchem Format ein String vorliegen soll (also die Formatierung a la dd.mm.yyyy hh:nn:ss ist mir bekannt). Nur gibt es geben keine Funktion, die nach gegebener Formatierung mir ein TDateTime macht.
Daher werde ich das wohl selbst lösen müssen.
-
Wenn du das Format kennst kannst du doch in deiner Anwendung vor der Umwandlung die Systemkonstanten umändern, also die Werte für ShortDateFormat, ShortTimeFormat, DateSeparator und andere. Danach sollte doch die Umwandlung in TDateTime funktionieren. Nach der Umwandlung kannst du die Werte dann entsprechend wieder in den Ausgangszustand versetzen.
siehe BCB-Hilfe zu "Formatvariablen für Währungs- und Datums-/Zeitangaben"