2016-04-22 94 views
1

我認爲這將是一個非常簡單的問題,但我無法解決它。在我的應用程序中,我想顯示當前時間取決於用戶的區域設置。如果我的手機通常顯示17:48,我希望我的應用以這種格式顯示。如果顯示5:48 pm,那麼同樣的規則應該適用於我的應用程序。然而,無論我做什麼,它只顯示am/pm版本。我正在使用該系統。 DateTime class。我看到一些解決方案,我可以這樣做(設定時間爲奧地利時間格式):根據Windows 10 UWP應用顯示目前時間

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

它的工作原理! 但是,我不想手動設置它,而是根據用戶手機設置使用區域格式。 我試圖讓語言的國家名稱與CultureInfo.CurrentCulture這樣的:

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

不工作,因爲CultureInfo.CurrentCulture.Name始終顯示EN-US,即使我的手機設置爲奧地利地區。 當我使用GeographicRegion類和打印這樣的:

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

我會得到一個字符串和「Österreich」(=奧地利)打印userRegion.NativeName時;

有什麼辦法可以完成這件事嗎?

+0

CultureInfo.CurrentCulture應該包含手機用戶的區域設置,但由於某種原因,在UWP應用程序中,它被設置爲應用程序支持的(默認)語言。如果通過在package.appxmanifest中設置Resource Language =「de-AT」添加對de-AT的支持,並且用戶手機語言爲de-AT,則您將在CurrentCulture中獲得de-AT。但是,用戶的語言設置可能與用戶的區域設置有所不同,所以這沒有多大幫助。 –

回答

0

經過許多小時的搜索後,我找到了一種方法使其工作!我使用DateTimeFormatter類,它正是我想要的。至少據我所知。

 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); 

如果有人發現了一個錯誤,它不會在所有的電子郵件中工作,請告訴我。

+0

地理區域(用戶居住的地區)和用戶的地區設置是手機上的兩個獨立設置,因此無法保證您在使用地理區域時能夠獲得正確的設置。 –

0

可以使用 的TimeZoneInfo的TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id): 日期時間DT = TimeZoneInfo.ConvertTime(DateTime.Now,的TimeZoneInfo);

+0

感謝您的回答。之後我嘗試這樣做: string regionTime = dT.ToString(「t」); 它仍然顯示我在上午的時間。你能告訴我如何打印? – Southgarden116

+0

你可以試試這個。 CultureInfo.CurrentCulture.ClearCachedData();在字符串之前regionTime = dT.ToString(「t」); – ritesh