2016-04-22 16 views
1

Ich dachte, das wird eine sehr einfache Frage, aber ich kann es nicht lösen. In meiner App möchte ich die aktuelle Zeit abhängig von der Regionseinstellung des Benutzers anzeigen. Wenn mein Telefon normalerweise 17:48 anzeigt, möchte ich, dass meine App es in diesem Format anzeigt. Wenn es 17.48 Uhr anzeigt, sollte die gleiche Regel für meine App gelten. Aber was auch immer ich mache, es zeigt nur die am/pm-Version. Ich benutze das System. DateTime Klasse. Ich sah ein paar Lösungen, wo ich das tun kann (die Zeit auf österreichische Zeitformat einstellen):Anzeige der aktuellen Zeit in Abhängigkeit von der Region für Windows 10 UWP App

string time = DateTime.Now.ToString("t", de-AT); 

und es funktioniert! Ich möchte es jedoch nicht manuell einstellen, sondern das Regionsformat abhängig von den Telefoneinstellungen des Benutzers verwenden. Ich habe versucht, immer die Sprache Ländernamen mit CultureInfo.CurrentCulture wie folgt aus:

string time = DateTime.Now.ToString("t", CultureInfo.CurrentCulture.Name); 

Was nicht funktioniert, weil CultureInfo.CurrentCulture.Name immer en-US zeigt, obwohl mein Telefon österreichische gesetzt Region. Wenn ich die GeographicRegion Klasse und druck:

GeographicRegion userRegion = new GeographicRegion(); 
string region = userRegion.CodeTwoLetter; 

Ich werde AT bekommen als String und "Österreich" (= Österreich), wenn userRegion.NativeName Druck;

Gibt es eine Möglichkeit, dies zu tun?

+0

CultureInfo.CurrentCulture sollte die regionalen Einstellungen des Telefonbenutzers enthalten, aber aus irgendeinem Grund wird es in einer UWP-App auf die von Ihrer App unterstützte (Standard) Sprache eingestellt. Wenn Sie Unterstützung für de-AT hinzufügen, indem Sie Resource Language = "de-AT" in Ihrem package.appxmanifest setzen und die Benutzer-Telefonsprache de-AT ist, erhalten Sie de-AT in CurrentCulture. Die Spracheinstellung des Benutzers kann jedoch von der Regionseinstellung des Benutzers abweichen. Dies hilft nicht viel. –

Antwort

0

Nach vielen Stunden der Suche habe ich einen Weg gefunden, damit es funktioniert! Ich verwende die DateTimeFormatter-Klasse, die genau das tut, was ich will. Zumindest soweit ich weiß.

 GeographicRegion userRegion = new GeographicRegion(); 
     string regionCode = userRegion.CodeTwoLetter; 

     DateTimeFormatter timeFormatter = new DateTimeFormatter("hour minute", new[] { regionCode }); 
     string correctTime = timeFormatter.Format(DateTime.Now);   
     DateTimeFormatter dateFormatter = new DateTimeFormatter("dayofweek month day", new[] { regionCode }); 
     string correctDate = dateFormatter.Format(DateTime.Now); 

Wenn jemand einen Fehler darin sieht und es nicht in allen Bereichen funktioniert, bitte sagen Sie mir.

+0

Die geografische Region (Region, in der der Benutzer lebt) und die regionalen Einstellungen des Benutzers sind zwei separate Einstellungen auf dem Telefon. Daher gibt es keine Garantie, dass Sie die richtigen Einstellungen erhalten, wenn Sie die geografische Region verwenden. –

0

können Sie verwenden Timezonetimezone = TimeZoneInfo.FindSystemTimeZoneById (TimeZoneInfo.Local.Id): Datetime dt = TimeZoneInfo.ConvertTime (DateTime.Now, Timezone);

+0

Danke für die Antwort. Ich habe es danach versucht: string regionTime = dT.ToString ("t"); und es zeigt mir immer noch die Zeit in am. Können Sie mir sagen, wie ich das ausdrucken soll? – Southgarden116

+0

können Sie dies versuchen. CultureInfo.CurrentCulture.ClearCachedData(); vor String regionTime = dT.ToString ("t"); – ritesh