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

本文关键字:日期 ASP NET 本地化 MVC | 更新日期: 2023-09-27 18:34:36

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

@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}" )]

同样,问题似乎是格式在属性中进行了硬编码。

有什么想法吗?

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

DateTime.ToString 方法有一个包含两个参数的版本:

public string ToString(
  string format,
  IFormatProvider provider
)

另外,对于 format,参数支持为不同区域性产生不同结果的格式 - 例如"d"值:

date.ToString("d", provider) 

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

有关详细信息,请参阅 MSDN 文章的示例部分。

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

new CultureInfo("en-US")

然后将其与 DateTime.ToString 方法一起使用