Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TDateTimePicker und datetostr (https://www.delphipraxis.net/57106-tdatetimepicker-und-datetostr.html)

jaikai 15. Nov 2005 22:00


TDateTimePicker und datetostr
 
Hi Leute,

folgendes Problem:

Code:
DateTimePicker1.MinDate := strtodate('01.01.1900'); // früher geht wohl nicht
// Objektinspektor:
// Kind := dtkDate;
// DateFormat : dfShort
So - wenn ich jetzt bsp. das Jahr 1901 nehme und mit

Code:
FormatDateTime( 'yyyy.mm.dd', StrToDate(datetostr(DateTimePicker1.date)));
so zu einem listenfähigen ISO-date umschreibe, den ich auch wieder mittels

Code:
var datum2 : Tdate;

// S ist das ISO-date als String
Datum2 := EncodeDate ( strtoint(copy(s, 1, 4 )),
                          strtoint(copy(s, 6, 2 )),
                          strtoint(copy(s, 9, 2 )) );

   S2 := FormatDateTime( datetostr(Datum2), Datum2) ;
rückverwandle, dann bekomme ich bei Jahres-Werten wie 1901, 1933 etc Jahreswerte zurück die 2001, 2033 heißen und glatte 100 Jahre danebenliegen. Mit

Code:
ShortDateFormat := 'dd.mm.yyyy';
fange ich das deutsche Datumsproblem ab. Kollabiert aber sofort, wenn ich meine Rechner auf Gebietsschema UK oder USA ändere. Aber was mache ich, wenn das Ding in England oder den USA läuft?

Gibts ne Möglichkeit das 'ShortDateFormat' länderspezifisch und per Runtoime einzulesen, bzw zu setzen - oder gibts eine andere Möglichkeit?

Danke

himitsu 15. Nov 2005 22:28

Re: TDateTimePicker und datetostr
 
Das liegt bestimmt an dem DateFormat = dfShort ... ich weiß es jetzt zwar nicht genau (kenn diese Komponente kaum), aber ich vermute mal, daß dadurch das Jahr nur 2-stellig gehandhabt wird
und bei 2 stellig geht es halt nur in einem bestimmten Bereich (aktuell wohl zwischen 1950 und 2049 - dieser Bereich kann irgendwo im Programm und Windows eingestellt werden und wird standardmäßig von Windows übernommen), da dort ja die Jahrhundertangabe fehlt.
Du solltest also bei DateFormat etwas mit long verwenden, also die Unterstützung für 4-ställige Jahreszahlen aktivieren.


Dann ist DateTime auch in dem vollen Bereich nutzbar ^^
Code:
TDateTime  Double  Number of days since 30.12.1899 00:00
                     01.01.0001 - 31.12.9999 (-693593,99999..2958465,99999)


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 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