如何以定义的格式显示输入中的日期时间

时间:2015-03-09 15:30:38

标签: c# datetime globalization regional-settings

我在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日,但应该是09/03/2015。

如何解决这个问题?

提前致谢

2 个答案:

答案 0 :(得分:2)

对于用户输出,在致电String.Formattype.ToString时始终提供适用的CultureInfo

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

显然,为用户获取正确的CultureInfo并重新使用该实例会更好。

对于客户端应用程序(WPF,WinForms,...),默认值应该是正确的(即。CurrentCulture.CurrentCulture);但对于Web,您需要从HTTP请求的标题中检查用户的首选语言环境(我在开始请求中执行此操作,并通过缓存转​​换来保存创建大量CultureInfo个对象:cf. flyweight pattern)。 / p>

答案 1 :(得分:1)

由于您使用d standard date and time formatToShortDateString它们相同),看起来就像您的CurrentCulture ToShortDateString属性是M/d/yyyy,这就是你获得此代表性的原因。

作为解决方案,您可以使用.ToString()方法将其格式化为;

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

或者你可以逃避/字符;

Model.dateAudit.ToString("dd'/'MM'/'yyyy")