AGB  ·  Datenschutz  ·  Impressum  







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

FormatSettings for Dummies

Ein Thema von haentschman · begonnen am 12. Apr 2016 · letzter Beitrag vom 1. Mai 2019
Antwort Antwort
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.437 Beiträge
 
Delphi 12 Athens
 
#1

AW: FormatSettings for Dummies

  Alt 13. Apr 2016, 06:21
Moin und danke....

Das weiß ich alles. Ich will aber wissen wie das Zeitformat, was der Nutzer eingestellt hat, aussieht und anwenden. Primär geht es nur um die in FormatSettings gelieferten Werte. Die sind definitiv beim Zeitformat falsch. Du kannst einstellen was du willst. Der Formatstring für die Zeit ist immer gleich.
Ich habe mir schon eine Funktion gebaut die die "Unzulänglichkeiten" ausbügelt. Das kann es doch aber nicht sein.

Geändert von haentschman (13. Apr 2016 um 06:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: FormatSettings for Dummies

  Alt 13. Apr 2016, 08:17
Dann lies dich in die entsprechenden API-Funktionen ein und bau dir das so wie du das haben willst.

Kleiner Tipp: Da hat sich über die Zeit von Windows XP über Vista und 7 ... etwas (einiges) getan, was du auch alles berücksichtigen musst. Mal sehen auf welchen Ansatz du kommst.

Mit Delphi-Referenz durchsuchenSystem.SysUtils.GetLocaleStr kannst du sozusagen direkt auslesen, was das OS zurückgibt.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.437 Beiträge
 
Delphi 12 Athens
 
#3

AW: FormatSettings for Dummies

  Alt 13. Apr 2016, 10:45
Danke...
Zitat:
Da hat sich über die Zeit von Windows XP über Vista und 7
...da muß ich mal sagen das interessiert mich nicht. Ich lese die FormatSettings (dafür sind sie da) und erwarte korrekte Werte.
Stelle mal bitte in deinen Regionseinstellungen das kurze Zeitformat auf HH:mm Uhr (Vorlage). Dann zeige mir wie du mit Hilfe der Formatsettings das 13:48 Uhr (so wollte es ja der Nutzer) ohne zusätzliche Korrekturen in ein Label schreibst.

Ich will doch nur bestätigt haben, das auch bei Euch die Zeitformatierung in den FormatSettings falsch ist.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.199 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: FormatSettings for Dummies

  Alt 13. Apr 2016, 10:58
Klar, das wird bei jedem so sein.
Angehängte Grafiken
Dateityp: png shortTimeSettings.png (38,6 KB, 51x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: FormatSettings for Dummies

  Alt 13. Apr 2016, 11:21
Die FormatSettings sind dafür da, dass Delphi mit diesen arbeiten kann und zwar auf jeder Plattform. Somit sind diese Einstellungen dort entsprechend gleichgeschaltet.

Um damit zu arbeiten verwendet man ganz simpel die Funktionen, die optional die FormatSettings als Argument anbieten. Alles, was nach Datum/Zeit riecht wird intern von System.SysUtils.DateTimeToString() (nur intern verfügbar) in einen String umgewandelt.

Wenn du wissen willst, was jetzt explizit bei dem OS an EInstellungen original drin stehen, dann musst du das über den Weg auslesen, den das OS zur Verfügung stellt.

Eigentlich nicht so schwer zu verstehen ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: FormatSettings for Dummies

  Alt 13. Apr 2016, 11:33
Nur mal so gesagt:
1. Warum kommt hier Label.Caption := FormatDateTime(Now, FormatSettings.ShortDateFormat) 12/04/2016 statt 12.04.2016 ?
Das kann ich noch nicht einmal kompilieren

Das hier schon
Label1.Caption := FormatDateTime( FormatSettings.ShortDateFormat, Now ); Hier mal ein kleines Beispielprogramm, wo man auch live die Änderungen sehen kann
Delphi-Quellcode:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.AppEvnts;

type
  TForm1 = class( TForm )
    Label1: TLabel;
    ApplicationEvents1: TApplicationEvents; { OnSettingChange = ApplicationEvents1SettingChange }
    procedure ApplicationEvents1SettingChange(Sender: TObject; Flag: Integer;
      const Section: string; var Result: Integer);
    procedure FormShow(Sender: TObject);
  private
    procedure PresentData;
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ApplicationEvents1SettingChange(Sender: TObject; Flag: Integer;
  const Section: string; var Result: Integer);
begin
  PresentData;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  PresentData;
end;

procedure TForm1.PresentData;
begin
  Label1.Caption := FormatDateTime( FormatSettings.ShortDateFormat, Now );
end;

end.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.437 Beiträge
 
Delphi 12 Athens
 
#7

AW: FormatSettings for Dummies

  Alt 13. Apr 2016, 11:37
Zitat:
Um damit zu arbeiten verwendet man ganz simpel die Funktionen, die optional die FormatSettings als Argument anbieten. Alles, was nach Datum/Zeit riecht wird intern von System.SysUtils.DateTimeToString() (nur intern verfügbar) in einen String umgewandelt.
...aber mit falschem Zeitformat.
Zitat:
Das kann ich noch nicht einmal kompilieren
...sorry war auf dem Handy aus dem Hut getippt. Value und FormatString ist umgekehrt.
Delphi-Quellcode:
procedure TForm1.PresentData;
begin
  Label1.Caption := FormatDateTime( FormatSettings.ShortDateFormat, Now );
end;
...jetzt nimmst du mal ShortTimeFormat und versuchst in der Region Englisch mit 12 Std. Anzeige und AM/PM einzustellen. Alternativ kannst du auch unser 24 Stundenformat probieren... es kommt immer 12 Std.Format ohne AM/PM raus.


Wir brechen hier ab. Ich habe mir das selbst für unsere Zwecke korrigiert.

Danke an alle...

Geändert von haentschman (13. Apr 2016 um 11:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: FormatSettings for Dummies

  Alt 13. Apr 2016, 11:43
Beim Zeitformat hat Emba allerdings geschlafen, das wird nicht so übernommen, wie in den Windows-Einstellungen eingetragen.

Delphi-Quellcode:
  TimePrefix := '';
  TimePostfix := '';
  if StrToIntDef(GetLocaleStr(Locale, LOCALE_ITLZERO, '0'), 0) = 0 then
    HourFormat := 'h'
  else
    HourFormat := 'hh';
  if StrToIntDef(GetLocaleStr(Locale, LOCALE_ITIME, '0'), 0) = 0 then
    if StrToIntDef(GetLocaleStr(Locale, LOCALE_ITIMEMARKPOSN, '0'), 0) = 0 then
      TimePostfix := ' AMPM'
    else
      TimePrefix := 'AMPM ';
  Result.ShortTimeFormat := TimePrefix + HourFormat + ':mm' + TimePostfix; // <- DA
  Result.LongTimeFormat := TimePrefix + HourFormat + ':mm:ss' + TimePostfix; // <- DA
Da bleibt nur der Weg über das OS (auslesen, ummodeln, verwenden)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (13. Apr 2016 um 11:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.045 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

AW: FormatSettings for Dummies

  Alt 13. Apr 2016, 11:50
Dein Problem liegt darin, dass du annimmst,
TFormatSettings.ShortTimeFormat und LongTimeFormat hätten etwas mit dem ab Windows 7 einstellbaren "Short time" und "Long time" zu tun, was aber nicht der Fall ist.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: FormatSettings for Dummies

  Alt 13. Apr 2016, 11:54
Dein Problem liegt darin, dass du annimmst,
TFormatSettings.ShortTimeFormat und LongTimeFormat hätten etwas mit dem ab Windows 7 einstellbaren "Short time" und "Long time" zu tun, was aber nicht der Fall ist.
Öhm ... diese Relation würde ich aber auch implizieren ... nein besser: erwarten!

So bekommt man das Gewünschte:
Delphi-Quellcode:
procedure TForm1.PresentData;
var
  lShortTimeFmt: string;
  lLongTimeFmt : string;
begin
  Label1.Caption := FormatDateTime( FormatSettings.ShortDateFormat, Now ) + ' (' + FormatSettings.ShortDateFormat + ')';

  lShortTimeFmt := GetLocaleStr( GetThreadLocale, LOCALE_SSHORTTIME, FormatSettings.ShortDateFormat );
  Label2.Caption := FormatDateTime( lShortTimeFmt, Now );

  // Geht erst ab Windows 7!
  lLongTimeFmt := GetLocaleStr( GetThreadLocale, LOCALE_STIMEFORMAT, FormatSettings.LongTimeFormat );
  Label3.Caption := FormatDateTime( lLongTimeFmt, Now );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 06:55 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