![]() |
Datum in internationalen DateTimePicker
Hallo zusammen,
wahrscheinlich denken jetzt einige das Thema hatten wir schon mal...das stimmt, aber es beantwortet nicht meine Fragen. Deshalb hier mein Problem: Ich speichere in der Datenbank Daten mit dem Datumsformat dd.mm.yyyy. Wenn ich diese Daten auslese, lasse ich diese 1:1 anzeigen. Für die Bearbeitung der Daten verwende ich den TDateTimePicker (Dateformat ist dtShort). Arbeite ich nun mit der Software auf unterschiedlichen Systemen, mit unterschiedlichen Regionseinstellungen bekomme ich beim Setzen des Datums aus der Datenbank im DateTimePicker eine Exception 'ungültiges Datum....'. Meine Frage hierzu ist, wie kann ich das Datum aus der Datenbank (String) in die lokalen Datumseinstellungen konvertieren, um dieses dann an den DateTimePicker übergeben zu können? Folgenden Source habe ich:
Delphi-Quellcode:
Hoffe auf eure Hilfe. :wall:
var format : TFormatSettings;
begin ... GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, format); ? DateTimePicker1.Date := ?; ... end; Danke im Voraus und Gruß, Moony |
Re: Datum in internationalen DateTimePicker
Warum speicherst du das Datum nicht im systemunabhängigem Format?
FormatDateTime() |
Re: Datum in internationalen DateTimePicker
EDIT: Du solltest das Datum wirklich lieber systemunabhängig speichern.
Sonst wäre für dich vielleicht ![]() |
Re: Datum in internationalen DateTimePicker
@mkinzler:
Wie soll ich das anwenden? String := FormatDateTime(String, TDateTime, [FormatSettings]); Ich hab den String, der mein Datum aus der DB ist und Formatsettings, meine lokalen Einstellungen. @geofranz: Das Problem ist, ich möchte in der Datenbank die gleiche Ansicht haben, egal mit welchen Systemeinstellungen. Wenn ich dann in die DB schreibe werden die lokalen Einstellungen in die DB geschrieben. Deshalb speichere ich grundsätzlich von der Software her im gleichen Format, muß dann aber auch zur Bearbeitung darauf achten und meinen Datumsstring im richtigen Format an den DateTimePicker übergeben. Was deinen Link betrifft, löst es nicht mein problem. Denn hier werden die lokalen Einstellungen ausgelesen, der aktuelle Zeitstempel in die Stringvariable geschrieben und mit den gleichen Einstellungen in ein DateTime-Objekt geschrieben. Ich hingegen hab als Ausgangssituation ein bestimmtes format und möchte das in die lokalen Einstellungen umwandeln. Hoffe das ist soweit verständlich. |
Re: Datum in internationalen DateTimePicker
Ich weiß nicht ob ich dein Problem nun richtig verstanden habe:
Du bekommst ein Datum als String aus der Datenbank z.B. '12.02.2008'. Diesen willst du jetzt in dem DateTimePicker anzeigen. Das kannst du systemunabhängig z.B. mit:
Delphi-Quellcode:
var
str:String; year, month, day:Word; begin str:='12.02.2008'; //den String von der Datenbank year := strtoint(Copy(Str,7,4)); month := strtoint(Copy(Str,4,2)); day := strtoint(Copy(Str,1,2)); DateTimePicker1.Date := EncodeDate(year, month, day); Wenn du das Datum von dem DateTimePicker wieder zurückverwandelst geht das mit:
Delphi-Quellcode:
Hab ich das jetzt richtig verstanden oder hab ich gerade ein Brett vorm Kopf??
str := FormatDateTime('dd.mm.yyyy', DateTimePicker1.date);
mfg, geofranz |
Re: Datum in internationalen DateTimePicker
Ja, das ist genau richtig vrstanden. Ich probiere das aus, aber ich meine ich hätte das gestern mit Encode & Decode versucht. Wahrscheinlich hat da das decode nicht funktioniert. Ich melde mich wieder....
|
Re: Datum in internationalen DateTimePicker
Hallo Moony,
wenn dein DBMS einen Datentyp DATE o.ä. kennt, dann solltest du Datumsangaben grundsätzlich mit diesem Datentyp speichern. Plan B wäre dann ein definiertes Binärformat oder - wenn es ein String sein soll - das ISO-Format YYYYMMDD. Alles andere, insbesondere die Speicherung in einem regionalen Anzeigeformat, ist Pfusch, der Folgekosten verursacht. Freundliche Grüße |
Re: Datum in internationalen DateTimePicker
Ich habe das jetzt so geregelt wie geofranz es beschrieben hat.
Wenn ich die Zeit habe, dann werde ich das versuchen so zu basteln, dass in der DB das Feld als Date-Objekt abgelegt wird und dann schauen wie das DBMS mir das Datum international darstellt, wenn ich es wieder auslese. Danke für eure Hilfe. Gruß, Moony |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:26 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