我有一个位于瑞士的网络服务器,它旨在为美国地区和欧洲地区提供服务。从美洲显示日期时,日期由句点而不是斜线分隔。
在某些情况下,如果他们是欧洲人,我想使用句号,在其他情况下,我想使用斜杠。如果我指定格式字符串使用斜杠,它将根据计算机设置转换为句点。我需要做什么来为每个用户指定区域设置(用户必须登录,我知道他来自哪个区域)。
我有一个位于瑞士的网络服务器,它旨在为美国地区和欧洲地区提供服务。从美洲显示日期时,日期由句点而不是斜线分隔。
在某些情况下,如果他们是欧洲人,我想使用句号,在其他情况下,我想使用斜杠。如果我指定格式字符串使用斜杠,它将根据计算机设置转换为句点。我需要做什么来为每个用户指定区域设置(用户必须登录,我知道他来自哪个区域)。
ASP.NET 中的全球化几乎可以为您做所有事情。请参阅这篇 MSDN 文章,标题为如何:为 ASP.NET 网页全球化设置文化和 UI 文化。这应该正是您想要的,因为您只需要在用户登录时为当前线程设置当前(UI)文化。然后您可以调用date.ToString()
它,它将以正确的格式返回文本表示。
等效地,您可以执行以下操作:
var culture = System.Globalization.CultureInfo.GetCultureInfo("en-GB");
var dateString = date.ToString(culture.DateTimeFormat);
但它实际上只是手动做同样的事情,而且远没有那么优雅。您不妨在这里使用 ASP.NET 全球化框架。
如果当前区域性使用句点作为日期分隔符,则可以使用斜杠显示
C#
date.ToString(@"dd\/MM\/yyyy");
VB
date.ToString("dd\/MM\/yyyy")
使用带有 的格式字符串DateTime.ToString()
,如下所示:
DateTime.Now.ToString("MM/dd/yyyy");
在这种情况下,/ 字符表示“使用当前区域性的日期分隔符。”。更好的是,您可以调用DateTime.Now.ToShortDateString()
以使用本地系统的短日期格式。
命名空间中的本地化有更多帮助System.Globalization
。
现在的诀窍是:您的“本地”系统就是您的网络服务器,这意味着它几乎总是会使用瑞士格式。所以你还想通过一个IFormatProvider
告诉系统使用什么文化。看起来像这样:
DateTime.Now.ToString(System.Globalization.CultureInfo.GetCultureInfo("en-US"));
我不需要使用它,但 DateTime 具有您可以使用的内置文化信息:
DateTime dt = DateTime.Now;
dt.ToString(System.Globalization.CultureInfo.GetCultureInfo("fr-CH"));
在 MSDN 上看到这个。只需记录您用户的文化(“fr-CH”、“en-US”等),那么您可以做的不仅仅是美国诉瑞士。
或者,我相信您可以创建自己的文化信息来正确格式化日期,但我从来没有这样做过。