5

我有一个位于瑞士的网络服务器,它旨在为美国地区和欧洲地区提供服务。从美洲显示日期时,日期由句点而不是斜线分隔。

在某些情况下,如果他们是欧洲人,我想使用句号,在其他情况下,我想使用斜杠。如果我指定格式字符串使用斜杠,它将根据计算机设置转换为句点。我需要做什么来为每个用户指定区域设置(用户必须登录,我知道他来自哪个区域)。

4

4 回答 4

6

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 全球化框架。

于 2009-05-19T12:50:17.727 回答
4

如果当前区域性使用句点作为日期分隔符,则可以使用斜杠显示

C#

date.ToString(@"dd\/MM\/yyyy");

VB

date.ToString("dd\/MM\/yyyy")
于 2009-05-19T12:48:07.950 回答
2

使用带有 的格式字符串DateTime.ToString(),如下所示:

 DateTime.Now.ToString("MM/dd/yyyy");

在这种情况下,/ 字符表示“使用当前区域性的日期分隔符。”。更好的是,您可以调用DateTime.Now.ToShortDateString()以使用本地系统的短日期格式。

命名空间中的本地化有更多帮助System.Globalization

现在的诀窍是:您的“本地”系统就是您的网络服务器,这意味着它几乎总是会使用瑞士格式。所以你还想通过一个IFormatProvider告诉系统使用什么文化。看起来像这样:

DateTime.Now.ToString(System.Globalization.CultureInfo.GetCultureInfo("en-US"));
于 2009-05-19T12:46:51.900 回答
1

我不需要使用它,但 DateTime 具有您可以使用的内置文化信息:

DateTime dt = DateTime.Now;
dt.ToString(System.Globalization.CultureInfo.GetCultureInfo("fr-CH"));

在 MSDN 上看到这个。只需记录您用户的文化(“fr-CH”、“en-US”等),那么您可以做的不仅仅是美国诉瑞士。

或者,我相信您可以创建自己的文化信息来正确格式化日期,但我从来没有这样做过。

于 2009-05-19T12:50:23.187 回答