如何在ASP.NET MVC中本地化日期

时间:2016-02-15 15:24:21

标签: c# asp.net asp.net-mvc datetime razor

我们正在开发一个应用程序,可供包括英国和美国在内的多个地区的客户使用。在许多视图页面上,我们显示如下日期:

@Model.EventDate.ToString("dd/MM/yyyy HH:mm")

这在英国运作良好但是现在我们正在部署一个美国版本它应该是(日/月切换):

@Model.EventDate.ToString("MM/dd/yyyy HH:mm")

显然,我们不想拥有2个代码库,1个用于英国,1个用于美国。

无论如何我们可以根据我们所在的地区渲染这样的日期吗?

我的猜测是,第一步是呈现这样的日期:

@Html.DisplayFor(n => Model.EventDate)

然后添加一个属性:

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}" )]

同样问题似乎是格式在属性中是硬编码的。

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

DateTime.ToString方法有version with two arguments

public string ToString(
  string format,
  IFormatProvider provider
)

plus,格式参数支持为不同文化产生不同结果的格式 - 例如" d"值:

date.ToString("d", provider) 

将生成01.10.2008用于de-DE文化,但是10/1/2008用于en-US。

有关更多信息,请参阅该MSDN文章的示例部分。

答案 1 :(得分:0)

您需要从传入请求中确定文化​​字符串(如en-US),然后将其映射到自定义格式字符串。然后,您可以从区域性字符串创建CultureInfo实例。例如:

new CultureInfo("en-US")

然后使用DateTime.ToString方法