AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datum in internationalen DateTimePicker

Ein Thema von Moony · begonnen am 12. Feb 2008 · letzter Beitrag vom 13. Feb 2008
Antwort Antwort
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#1

Datum in internationalen DateTimePicker

  Alt 12. Feb 2008, 16:14
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:
var format : TFormatSettings;
begin
  ...
  GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, format);
  ?
  DateTimePicker1.Date := ?;
  ...
end;
Hoffe auf eure Hilfe.

Danke im Voraus und Gruß,

Moony
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Datum in internationalen DateTimePicker

  Alt 12. Feb 2008, 16:19
Warum speicherst du das Datum nicht im systemunabhängigem Format?
FormatDateTime()
Markus Kinzler
  Mit Zitat antworten Zitat
geofranz01

Registriert seit: 17. Jun 2007
72 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Datum in internationalen DateTimePicker

  Alt 12. Feb 2008, 16:25
EDIT: Du solltest das Datum wirklich lieber systemunabhängig speichern.

Sonst wäre für dich vielleicht das hier interessant.
Max
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Datum in internationalen DateTimePicker

  Alt 12. Feb 2008, 16:33
@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.
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
geofranz01

Registriert seit: 17. Jun 2007
72 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Datum in internationalen DateTimePicker

  Alt 12. Feb 2008, 17:12
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:
str := FormatDateTime('dd.mm.yyyy', DateTimePicker1.date); Hab ich das jetzt richtig verstanden oder hab ich gerade ein Brett vorm Kopf??

mfg,
geofranz
Max
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Datum in internationalen DateTimePicker

  Alt 13. Feb 2008, 08:41
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....
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: Datum in internationalen DateTimePicker

  Alt 13. Feb 2008, 10:08
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
  Mit Zitat antworten Zitat
Moony

Registriert seit: 29. Jul 2003
Ort: Essen
454 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Datum in internationalen DateTimePicker

  Alt 13. Feb 2008, 14:03
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
Ich weiß, daß ich nichts weiß! Sokrates
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:05 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