1

我在 ASP.NET 表单中使用日期。

我想在 UI 中以法语格式(日/月/年)显示日期,并通过模型绑定将其放入控制器中。

我有这个模型属性:

[DisplayFormat(DataFormatString = "{dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime dateAudit { get; set; }

我以 DateTime.Now 开头,并以以下形式显示:

@Html.TextBox("dateAudit", String.Format("{0:d}", Model.dateAudit.ToShortDateString(), new { @class = "datefield" }))

是的,我也把它放在了配置中:

<globalization uiCulture="fr-FR" />

问题是显示的日期是 2015 年 3 月 9 日,但应该是 2015 年 9 月 3 日。

如何解决这个问题?

提前致谢

4

2 回答 2

2

CultureInfo对于用户输出,在调用String.Format或时始终提供适用的type.ToString

IE。

String.Format(new CultureInf("fr-FR")., "{0:d}", …)

显然更好地CultureInfo为用户获得权利,并重用实例。

对于客户端应用程序(WPF、WinForms、...),默认值应该是正确的(即。CurrentCulture.CurrentCulture);但是对于网络,您需要从 HTTP 请求的标头中检查用户的首选语言环境(我在开始请求中执行此操作,并缓存转换以节省创建大量CultureInfo对象:参见 flyweight 模式)。

于 2015-03-09T15:36:36.883 回答
1

由于您使用d标准日期和时间格式ToShortDateString它们是相同的),看起来您CurrentCultureToShortDateString属性是M/d/yyyy,这就是您获得此表示的原因。

作为一种解决方案,您可以使用.ToString()方法对其进行格式化;

Model.dateAudit.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture)

或者你可以转义/字符;

Model.dateAudit.ToString("dd'/'MM'/'yyyy")
于 2015-03-09T15:35:54.267 回答