Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Android 15 und OneUI7.0 werden die Uhrzeiten 12 Stunden format angezeigt (https://www.delphipraxis.net/217232-android-15-und-oneui7-0-werden-die-uhrzeiten-12-stunden-format-angezeigt.html)

QuickAndDirty 26. Mai 2025 15:28


Android 15 und OneUI7.0 werden die Uhrzeiten 12 Stunden format angezeigt
 
Also einige User deren Samsung Smartphone ein Update auf Android 15 und OneUI 7.0
erfahren haben bekommen die Uhrzeiten die in der App angezeigt werden im 12 Stunden format angezeigt.
Obwohl die System Uhrezit auf 24h format eingestellt ist.

Hat jemand so eine Erfahrung gemacht?

Delphi-Quellcode:
initialization
  CommonFormat := TFormatSettings.Create('de-DE');// Das wird schon alles initialisiert
  CommonFormat.ShortDateFormat := 'DD.MM.YYYY';
  FormatSettings := TFormatSettings.Create('de-DE');// Das wird schon alles initialisiert
  FormatSettings.ShortDateFormat := 'DD.MM.YYYY';

Das wird so dargestellt
Delphi-Quellcode:
  TimeToStr(self.Time,CommonFormat),
  DateToStr(self.Date,CommonFormat),

zeras 26. Mai 2025 18:47

AW: Android 15 und OneUI7.0 werden die Uhrzeiten 12 Stunden format angezeigt
 
Kann man nicht auch für die Zeit entsprechende Formatsettings angeben?


So sollte es gehen.

FS := TFormatSettings.Create;
FS.ShortTimeFormat := 'HH:mm';
FS.LongTimeFormat := 'HH:mm:ss';

fisipjm 27. Mai 2025 05:56

AW: Android 15 und OneUI7.0 werden die Uhrzeiten 12 Stunden format angezeigt
 
Zitat:

Zitat von QuickAndDirty (Beitrag 1548969)

Hat jemand so eine Erfahrung gemacht?

Ja, ist so. Liegt aber nicht an Samsung sondern ist irgendwann mit Android 15 rein gekommen. Auf einem aktuellen Pixel Smartphone schon seit ca. 6 Monaten so.
In unseren APPs lösen wir das bei der Sprachauswahl und setzen das Format Global über die Formatsettings. Dann muss man nicht jede stelle ergänzen wo DateTimeToStr oder TimeToStr genutzt wird.

Delphi-Quellcode:
var
FS: TFormatSettings;
LanguageCode: string;
begin
  LanguageCode := 'de-DE';
  FS := TFormatSettings.Create(ALanguageCode);
  FS.ShortTimeFormat := 'HH:mm';
  FS.LongTimeFormat := 'HH:mm:ss';
  FormatSettings := FS;
end;

QuickAndDirty 27. Mai 2025 08:21

AW: Android 15 und OneUI7.0 werden die Uhrzeiten 12 Stunden format angezeigt
 
Also ich setze die Formatsettings ja auch zentral im initialization Teil meiner Typen-Sammel-Unit...
So wie es aussieht müsste per marshalling ICUlib geladen werden, wenn man den Locale 'de-DE' angibt
das wird im falle von Android in 'de_DE' umgewandelt...
Und wenn der Code nicht in der ICU lib gefunden wird nimmt Sysutils die 'en_US' settings...

Ich habe das leider noch nicht debuggen können(habe kein Android 15) aber ich denke Delphi sollte das korrigieren und weiter funktionieren!
Da ich leider keinen Zugriff auf Quality central habe kann ich den Fehler auch nicht melden.


Ich habe außerdem bemerkt das Mein App als einzige nicht in der "App-Sprache" liste der Einstellungen auftritt. In dieser Liste werden Apps gelistet die eine Sprachauswahl unterstützen.
Ich unterstütze aber keine Sprachauswahl da ich keinen Support in anderen Sprachen liefern kann.
Würde der Locale Code wieder funktionieren wenn die App in der Sprachauswahl liste auftauchen würde? Und wo legt man fest das die App Sprachauswahl unterstützt ?
Hat jemand eine App die in der Liste ist und bei der trotzdem der Locale code nicht funktioniert?

Gemini meint ich soll die
locales_config.xml
vernünftig konfigurieren wtf???

An anderer Stelle heist es, dass seit Android 15 Setlocale nur noch innerhalb einer Activity funtioniert...und dann für alle Activities die davon abgehen gesetzt bleibt...
Ich rufe das Locale ja ab befor irgendeine activity (Form ???) erzeugt ist und ich brauche das ja auch schon vorher.


Im Moment sieht die Lösung so aus??? Wie machen das Firmen mit mehr als einer unterstützten Sprache?
Delphi-Quellcode:
  {
  CommonFormat := TFormatSettings.Create('de-DE');// Das wird schon alles initialisiert
  CommonFormat.ShortDateFormat := 'DD.MM.YYYY';
  }
  CommonFormat.LongDateFormat := 'DD.MM.YYYY';
  CommonFormat.CurrencyString := '€';
  CommonFormat.CurrencyFormat := 3;
  CommonFormat.NegCurrFormat := 8;
  CommonFormat.CurrencyDecimals := 2;
  CommonFormat.TimeAMString := '';
  CommonFormat.TimePMString := '';
  CommonFormat.ShortTimeFormat := 'hh:mm:ss';
  CommonFormat.LongTimeFormat := 'hh:mm:ss,zzz';
  CommonFormat.ThousandSeparator := '.';
  CommonFormat.DecimalSeparator := ',';
  CommonFormat.DateSeparator := '.';
  CommonFormat.TimeSeparator := ':';
  {
  FormatSettings := TFormatSettings.Create('de-DE');// Das wird schon alles initialisiert
  FormatSettings.ShortDateFormat := 'DD.MM.YYYY';
  }
  FormatSettings.LongDateFormat := 'DD.MM.YYYY';
  FormatSettings.CurrencyString := '€';
  FormatSettings.CurrencyFormat := 3;
  FormatSettings.NegCurrFormat := 8;
  FormatSettings.CurrencyDecimals := 2;
  FormatSettings.TimeAMString := '';
  FormatSettings.TimePMString := '';
  FormatSettings.ShortTimeFormat := 'hh:mm:ss';
  FormatSettings.LongTimeFormat := 'hh:mm:ss,zzz';
  FormatSettings.ThousandSeparator := '.';
  FormatSettings.DecimalSeparator := ',';
  FormatSettings.DateSeparator := '.';
  FormatSettings.TimeSeparator := ':';

QuickAndDirty 27. Mai 2025 08:53

AW: Android 15 und OneUI7.0 werden die Uhrzeiten 12 Stunden format angezeigt
 
Die funktion die funktionieren muss ist
Delphi-Quellcode:
 udat_open: function(timeStyle: UDateFormatStyle; dateStyle: UDateFormatStyle;
    const locale: MarshaledAString; const tzID: PUChar; tzIDLenght: Int32;
    const pattern: PUChar; patternLenght: Int32; var status: UErrorCode): PUDateFormat; cdecl;
aus der unit System.Internal.ICU

das ist die C funktion
https://unicode-org.github.io/icu-do...d86a00211c4807

Delphi-Quellcode:
udat_open: function(
timeStyle: UDateFormatStyle;   //UDateFormatStyle timeStyle
dateStyle: UDateFormatStyle;   //UDateFormatStyle dateStyle
const locale: MarshaledAString; //const char* locale
const tzID: PUChar;            //const UChar* tzID
tzIDLenght: Int32;             //int32_t tzIDLength
const pattern: PUChar;         //const UChar* pattern
patternLenght: Int32;          //int32_t patternLength
var status: UErrorCode         //UErrorCode* status
): PUDateFormat; cdecl;        //U_CAPI UDateFormat*
daran hat sich anscheinend nichts geändert sieht korrekt importiert aus.

hm

QuickAndDirty 27. Mai 2025 09:20

AW: Android 15 und OneUI7.0 werden die Uhrzeiten 12 Stunden format angezeigt
 
Es ist so traurig...
der rückgabe wert ist einefach ein Zeiger auf Daten...ohne durch den tyo vorgegeben struktur...da kann sich was drann ändern und kein compiler merkt es...wtf.

Und ich dachte schon C wäre ok.

fisipjm 27. Mai 2025 09:44

AW: Android 15 und OneUI7.0 werden die Uhrzeiten 12 Stunden format angezeigt
 
Aktueller QP-Report dazu (nicht von mir):
https://embt.atlassian.net/servicede...tal/1/RSS-3548

Code:
The cause for the two wrong inialized FormatSettings strings can be found in the unit System.SysUtils, class function TFormatSettings.TranslateDateFormat, local function ICUGetDateTimeFormat. On Android 15 the call to udat_toPatternRelativeTime sets the ErrorConv variable to E_ILLEGAL_ARGUMENT_ERROR, that means that the call failed. Due to this unsuccessful call (and no error check) the result string is empty, so the overall result is the default value h:nn AMPM.

QuickAndDirty 27. Mai 2025 09:50

AW: Android 15 und OneUI7.0 werden die Uhrzeiten 12 Stunden format angezeigt
 
Code:
On Android 15 the call to udat_toPatternRelativeTime sets the ErrorConv variable to E_ILLEGAL_ARGUMENT_ERROR, that means that the call failed.
Also wird udat_toPatternRelativeTime irgendwie falsch von embarcadero mit werten versorgt oder?
Ich meine Android 15 wird ja nicht immer Fehler melden wenn da keine Fehler sind?

können wir auf einen Patch hoffen (ich habe keinen zugang zu QC) ?

fisipjm 27. Mai 2025 10:02

AW: Android 15 und OneUI7.0 werden die Uhrzeiten 12 Stunden format angezeigt
 
Die Anfrage ist vom 23.05.25 und steht auf offen. Mehr Informationen bekommt man vom neuen Quality-Portal leider nicht. Hab mal ein +1 rein geschoben. Ob es einen Patch geben wird oder nicht, dass gibt dir meistens noch nicht mal jemand von Emba. Aber eins kann ich dir mit Sicherheit sagen, es wird dauern. :roll:

QuickAndDirty 27. Mai 2025 11:09

AW: Android 15 und OneUI7.0 werden die Uhrzeiten 12 Stunden format angezeigt
 
Ich meine wir haben ja den quellcode und könnten ihn überarbeiten....leider bin ich nicht so gut in C und Marshallen...Obwohl die ICU lib auf github rumliegt.
Oder wir haben glück und ICUlib hat den Fehler und Android patched das in 12 monaten raus...lol


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:52 Uhr.
Seite 1 von 2  1 2      

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