如何根据用户的时区确定用户在网络上的文化?

时间:2013-03-20 17:22:14

标签: asp.net-mvc-3 timezone cultureinfo datetime-format

新手在这里。实际上,这是第一个问题。

我一直在使用NodaTime(在ASP.Net MVC 3 C#上)来绕过不同的时区,我对结果非常满意。 但... 我想知道是否有办法根据时区获取用户的文化信息 - 即:显示日期/时间。

提前感谢您的帮助!

更新

让我对此更加清楚......

我可以使用jsTimeZoneDetect和NodaTime来确定用户时区。它工作得很好。 现在,我需要找出用户区域设置信息(日期/时间格式等),以便能够正确显示这些信息。即:基于美国的用户会将日期视为2013年3月21日。

我试图从Request.UserLanguages获取区域设置但没有用。 IE正确返回我的语言环境(en-GB),但Firefox和Chrome都返回en-US。 我还更改了web.config并添加了以下元素:

<globalization culture="auto" uiCulture="auto" enableClientBasedCulture="true" />

这就是我一直在努力的代码:

var userLanguages = Request.UserLanguages;

CultureInfo ci;

if (userLanguages.Length > 0)
{
    try
    {
        ci = new CultureInfo(userLanguages[0]);
    }
    catch (CultureNotFoundException)
    {
        ci = CultureInfo.InvariantCulture;
    }
}
else
{
    ci = CultureInfo.InvariantCulture;
}

string cultureName = ci.Name /* Always returns en-US */

正如另一点,要求用户选择他们的区域设置信息对我来说不是一个选项。即:网站上的DropdownList等

还有什么帮助吗?提前谢谢。

更新2

按照@JonSkeet的建议,我更改了问题标题和标签以更好地适应我的问题。

更新3

刚刚找到了一些东西。返回语言(语言环境)的方式取决于浏览器,如下所示:

  • Internet Explorer会返回操作系统设置或浏览器设置的语言。
  • Firefox,Chrome,Safari和Opera会返回浏览器设置中设置的语言。

考虑到这一点,我甚至无法考虑使用这些信息,因为没有办法保证每个用户都会改变他们的浏览器设置。我可以依赖的唯一信息是来自操作系统设置的信息。

我对现在该做什么一无所知。

1 个答案:

答案 0 :(得分:0)

要回答所提出的问题,无论要求澄清......

在1.0中,我们没有任何地理信息。在1.1中,我们公开了来自zoneinfo.tab的信息,该信息将位置与每个时区(或至少大部分时区)(包括国家/地区)相关联。它没有完整的文化信息(例如,它不区分法语加拿大语和英语加拿大语,或瑞士语中使用的各种语言),但它提供了一些的想法。您可以通过TzdbDateTimeZoneSource.GeoLocations访问该信息。 (它仅适用于TZDB。)

当然,1.1尚未发布 - 但我们希望在未来几周内这样做,几乎可以肯定没有任何大的API更改。

我仍然建议通常通过HTTP请求检测文化。