根据 Windows 10 UWP 应用的区域显示当前时间

Posted

技术标签:

【中文标题】根据 Windows 10 UWP 应用的区域显示当前时间【英文标题】:Showing current time depending on region for Windows 10 UWP app 【发布时间】:2016-08-16 16:05:33 【问题描述】:

我认为这将是一个非常简单的问题,但我无法解决它。在我的应用程序中,我想根据用户的区域设置显示当前时间。如果我的手机正常显示 17:48,我希望我的应用程序以这种格式显示。如果它显示下午 5:48,那么同样的规则应该适用于我的应用程序。然而,无论我做什么,它只显示 am/pm 版本。我正在使用 System.DateTime 类。我看到了一些我可以这样做的解决方案(将时间设置为奥地利时间格式):

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;

打印 userRegion.NativeName 时,我将获得 AT 作为字符串和“Österreich”(= 奥地利);

有什么办法可以完成吗?

【问题讨论】:

CultureInfo.CurrentCulture 应该包含手机用户的区域设置,但由于某种原因,在 UWP 应用中它被设置为您的应用支持的(默认)语言。如果您通过在 package.appxmanifest 中设置 Resource Language="de-AT" 来添加对 de-AT 的支持,并且用户的手机语言是 de-AT,那么您将在 CurrentCulture 中获得 de-AT。但是,用户的语言设置可能与用户的区域设置不同,所以这并没有多大帮助。 【参考方案1】:

经过几个小时的搜索,我找到了一种让它工作的方法!我使用 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);

如果有人发现了其中的错误,并且并非在所有地区都有效,请告诉我。

【讨论】:

地理区域(用户居住的地区)和用户的区域设置在手机上是两个独立的设置,所以无法保证您在使用地理区域时会得到正确的设置。 【参考方案2】:

你可以使用

TimeZoneInfo timeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id);
DateTime dt = TimeZoneInfo.ConvertTime(DateTime.Now, timeZoneInfo);

【讨论】:

感谢您的回答。之后我尝试这样做: string regionTime = dT.ToString("t");它仍然显示我的时间。你能告诉我怎么打印吗? 你可以试试这个。 CultureInfo.CurrentCulture.ClearCachedData();在字符串之前 regionTime = dT.ToString("t");

以上是关于根据 Windows 10 UWP 应用的区域显示当前时间的主要内容,如果未能解决你的问题,请参考以下文章

修改 Windows 10 UWP 应用任务栏图标

如何更改 UWP 中选定 ListView 项的突出显示颜色(Windows 10)

Windows 10 Mobile是否支持UWP应用程序的Fluent设计系统?

WPF 桌面应用程序,Windows 10 通知 Toast 2016(UWP 社区工具包)

在Windows 10 C#UWP通用Windows应用程序中获取UserName

如何使用 UWP 应用检测由另一个应用触发的 Windows 10 Toast 通知