我在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。
如何解决这个问题?
提前致谢
答案 0 :(得分:2)
对于用户输出,在致电String.Format
或type.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 format和ToShortDateString
(它们相同),看起来就像您的CurrentCulture
ToShortDateString
属性是M/d/yyyy
,这就是你获得此代表性的原因。
作为解决方案,您可以使用.ToString()
方法将其格式化为;
Model.dateAudit.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture)
或者你可以逃避/
字符;
Model.dateAudit.ToString("dd'/'MM'/'yyyy")