Re: Windows 7: bei manchen Systemen falsches Datumsformat?
OT
Zitat:
Bei tausend und mehr Kunden artet das in nicht endenden Support aus. Der wird mir nicht bezahlt. Jedem erzähl ich dann, stellen Sie mal auf englisch und dann auf deutsch zurück, dann gehts. 80% wissen erst mal nicht, was ich überhaupt von ihnen will. Das ist einfach Zeit, die ich nicht haben möchte, also lieber das Rad selbst bauen. Windows ist mir relativ Schnuppe - meinetwegen kann da wer weis was für ein System drunter liegen, hauptsache das Produkt funktioniert. In diesem Sinne... (Sorry fürs Luft ablassen) |
Re: Windows 7: bei manchen Systemen falsches Datumsformat?
Zitat:
Erstmal kannst du für Dinge wo das Format wirklich feststehn muß immernoch den Format-Parameter nutzen.
Code:
Und ansonsten arbeitet man Programmintern einfach nicht mit solchen Werten,
function FormatDateTime(const Format: string; DateTime: TDateTime;
const [b]FormatSettings: TFormatSettings[/b]): string; sondern nutzt Formate, welche eben nicht systemabhängig sind.
Delphi-Quellcode:
If Now < StrToDate('01.01.2011') then
Delphi-Quellcode:
Jetzt wird das Datum nur noch zur Anzeige entsprechend Formatiert und schon kann der Benutzter das Datum so sehn, wie es ihm gefällt und wie es demnach im System eingestellt ist.
If Now < 40544 then
Tut mir Leid, aber ich sehe absolut keinen Grund, abgesehn von einer "lesbaren" Form der Datenspeicherung, um solche Werte formatiert zu verarbeiten. Also wenn irgendwo eine bestimmte Einstellung des Systems unnötiger Weise "vorgeschrieben" ist, damit auch alles ordnungsgemäß läuft, dann ist das meiner Meinung nach ein Programmfehler und nicht ein Fehler des Systems, welches auch einfach mal anders eingestellt sein kann. Derartige Einstellungen gehören zum UI (User Interface) und demnach auch nur in die Anzeige ... in der Internen Programmverarbeitung hat sowas nichts zu suchen. Oder warum wird sonst schon seit Jahren geprädigt, das Verarbeitung und Anzeige getrennt sein sollten? |
Re: Windows 7: bei manchen Systemen falsches Datumsformat?
Das ich formatierte Daten nicht bei der internen Programmverarbeitung nutze versteht sich ja von selbst - gehört eigentlich zum Grundwissen.
Aber wenn mich der x-te anruft, warum denn auf seinem neuen Client plötzlich der Kalender englische Wochentage anzeigt und das Datum anders formatiert ist, oder der Dezimalseparator auf einmal ein Punkt ist, oder der Datenbankindex defekt ist, weil compareString nicht korrekt nach deutschen Gegebenheiten vergleicht, ...dann hab ich darauf keinen Bock. Dann häng ich Windows komplett ab und mach alles selbst. Nur darum gehts: S' muss gehn |
Re: Windows 7: bei manchen Systemen falsches Datumsformat?
Wenn ich ein englisches Windows hab, warum sollte dann ein Programm nicht auch englische Formate nutzen?
Ein Amerikaner nutzt ja auch sonst den Punkt als Komma ... also könnte ihn ein Komma als Dezimaltrennzeichen genauso verwirren. Aber OK, wenn der Rest der GUI deutsch ist, dann ist es richtig, wenn man dort kein englisch anzeigt. Zitat:
|
Re: Windows 7: bei manchen Systemen falsches Datumsformat?
Zitat:
Aber egal, mach mer Schluss mit dem OT, bevor der Mod noch den Thread schliesst. |
Re: Windows 7: bei manchen Systemen falsches Datumsformat?
Hallo nochmal,
falls es jemand interessiert: Testprogramm mit Delphi2007 ==> US-Format Testprogramm mit aktuellem Lazarus-Snapshot (mit FPC 2.4.1) ==> US-Format Gruß, Patrick |
Re: Windows 7: bei manchen Systemen falsches Datumsformat?
Hallo Leutz!
Ich hab das gleiche Problem auf ASUS EeeTop2002-Systemen festgestellt. Scheint tatsächlich mit der Vorinstallation zu tun zu haben! Nach umstellen der Ländereinstellungen (auf z.B. Österreich) und sofortigem zurückstellen auf Deutschland, geht dann alles, wie es sein soll! Das gleiche passiert, wenn ich die Ländereinstellungen für Deutschland in der Systemsteuerung einfach "zurücksetze"! Ist natürlich großer Mist! Vor allem für den Support... :wall: Ich habe mir die Mühe gemacht, eigene Funktionen für Datums/Zeit und Währungsumwandlungen zu programmieren. Ich deklariere mir eine globale Variable:
Delphi-Quellcode:
Bei Programmstart initialisiere ich diese auf deutsches Format...
// Formateinstellungen für Datum/Zeit-Funktionen
// Damit Umwandlungen wie 'DateTimeToStr' // unabhängig von den Ländereinstellungen des // Systems funktionieren! z.B. bei Win7!!!!! // ============================================= gFS : TFormatSettings;
Delphi-Quellcode:
...und benutze sie dann in meinen Funktionen:
// Deutsche Format-Settings holen!
GetLocaleFormatSettings(1031, gFS);
Delphi-Quellcode:
function MyDateTimeToStr(const Datum : TDateTime) : String;
begin Result := DateTimeToStr(Datum, gFS); end; function MyTimeToStr(const Time : TTime) : String; begin Result := TimeToStr(Time, gFS); end; function MyDateToStr(const Datum : TDateTime) : String; begin Result := DateToStr(Datum, gFS); end; function MyStrToDateTime(const szDatum : String) : TDateTime; begin Result := StrToDateTime(szDatum, gFS); end; function MyStrToDate(const szDatum : String) : TDateTime; begin Result := StrToDate(szDatum, gFS); end; function MyStrToTime(const szTime : String) : TDateTime; begin Result := StrToTime(szTime, gFS); end; function MyTryStrToDateTime(const szDatum: string; var Datum: TDateTime): Boolean; begin Result := TryStrToDateTime(szDatum, Datum, gFS); end; function MyTryStrToDate(const szDatum: string; var Datum: TDateTime): Boolean; begin Result := TryStrToDate(szDatum, Datum, gFS); end; function MyTryStrToTime(const szTime: string; var Datum: TDateTime): Boolean; begin Result := TryStrToTime(szTime, Datum, gFS); end; Ich habe mir ein kleines Testprogramm gebastelt: :coder2:
Delphi-Quellcode:
Interessant ist in diesem Zusammenhang folgendes:
procedure TForm1.Button1Click(Sender: TObject);
var FormatSettings: TFormatSettings; var MyLCID : Integer; begin GetLocaleFormatSettings(SysLocale.DefaultLCID,FormatSettings); Label1.Caption := '(' + IntToStr(SysLocale.DefaultLCID) + ') -> ' +DateTimeToStr(now, FormatSettings); MyLCID := GetUserDefaultLCID; GetLocaleFormatSettings(MyLCID,FormatSettings); Label8.Caption := '(' + IntToStr(MyLCID) + ') -> ' +DateTimeToStr(now, FormatSettings); GetLocaleFormatSettings(1031,FormatSettings); Label2.Caption := '(' + IntToStr(1031) + ') -> ' + DateTimeToStr(now, FormatSettings); Label3.Caption := '() -> ' + DateTimeToStr(now); end; Es machte auf den getesteten Windows 7 - Systemen (3 konnte ich testen) einen Unterschied, ob ich die SysLocale.DefaultLCID (->ergibt US-Format) oder die GetUserDefaultLCID (-> ergibt deutsches Format) benutze. Es ist nur die SysLocale.DefaultLCID betroffen! Anscheinend benutzt Delphi diese in den eigenen Funktionen! Die über GetUserDefaultLCID bezogene LCID ist immer korrekt! :gruebel: Vermutlich ist die Lokalisierung der getesteten Windows 7-Systeme nur auf User-Ebene erfolgt... Shit happens! :zwinker: |
Re: Windows 7: bei manchen Systemen falsches Datumsformat?
Moin moin,
Zum Beispiel bein Win64 auf Asus-Altec und das haut dann 'strtofloat' in Exceptions. Solange das Programm deutsch spricht bekommt es also obigen Weg. Grüße in die Runde |
Re: Windows 7: bei manchen Systemen falsches Datumsformat?
Hallo zusammen,
ich habe das gleiche Problem. Meine Berechnung erfolgt noch komplett richtig in der jeweiligen Form, wie ich es in den Ländereinstellungen vorgegeben ist. Versuche ich aber nun mit FormatDateTime('dd.mm.yyyy', date) das Ergebnis als String auszugeben, dann gibt es eine Exception. Da ich mit Datumswerten rechnen muss, hat jemand einen Vorschlag, wie man solche Sachen umgehen kann ? |
Re: Windows 7: bei manchen Systemen falsches Datumsformat?
Mir fällt da nur ein die Constanten entsprechend einer Spracheinstellung im Programm zu definieren.
Wenn das ein Windows Problem ist, weiss man kaum auf welchen Rechner man trifft. Zumal ich hier ein gut geupdatetes Windows 7 habe und es auch keinen Hang zur Autokorrektur gibt. Eigentlich müßten auch die Delphi 2010´er das Problem haben. Kann das mal einer Testen? Grüße // Martin PS: Ein kleiner Nebeneffekt: Habe hier ein DBEdit mit Floatfeld als Datenbankbasis in FB. Das Ding akzeptiert keine Kommas, dafür aber Punkte als Anteilstrenner. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:59 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