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

C# 如何以定义的格式在输入中显示日期时间,c#,datetime,globalization,regional-settings,C#,Datetime,Globalization,Regional Settings,我正在ASP.NET表单中使用日期 我想在UI中用法语格式(日/月/年)显示日期,并将其放入控件中,使用此控件进行模型绑定 我拥有此模型属性: [DisplayFormat(DataFormatString = "{dd/MM/yyyy}", ApplyFormatInEditMode = true)] public DateTime dateAudit { get; set; } 我将其命名为DateTime。现在,在表格中显示: @Html.TextBox("dateAud

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

我想在UI中用法语格式(日/月/年)显示日期,并将其放入控件中,使用此控件进行模型绑定

我拥有此模型属性:

[DisplayFormat(DataFormatString = "{dd/MM/yyyy}", ApplyFormatInEditMode = true)]
        public DateTime dateAudit { get; set; }
我将其命名为DateTime。现在,在表格中显示:

@Html.TextBox("dateAudit", String.Format("{0:d}", Model.dateAudit.ToShortDateString(), new { @class = "datefield" }))
是的,我也把它放在配置中:

<globalization uiCulture="fr-FR" />

问题在于,所示日期为2015年3月9日,但应为2015年3月9日

如何解决这个问题

由于您使用了and(它们是相同的),因此提前感谢您的
CurrentCulture
ToSortDateString
属性是
M/d/yyyy
,这就是您获得此表示形式的原因

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

Model.dateAudit.ToString("dd/MM/yyyy", CultureInfo.InvariantCulture)
或者您可以像这样转义
/
字符

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

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

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


对于客户端应用程序(WPF、WinForms等),默认值应该是正确的(即
CurrentCulture.CurrentCulture
);但是对于web,您需要从HTTP请求的头中检查用户的首选区域设置(我在begin请求中这样做,缓存转换以保存创建大量
CultureInfo
对象:参见flyweight模式).

您需要整个页面/请求是fr fr还是只需要单个字段?您确定您的
CurrentCulture
fr
?除了
uiCulture
之外,您可能还需要
culture=“fr”
@阿列克谢列文科夫:对。UI区域性值用于资源查找,区域性用于格式化数据。@Alexei:12号之前的fir日期看起来不错,但当我在12号以下时以及当我按下提交按钮时,日期选择器会出现,为什么?我删除了日期的验证…感谢您的回复@Soner,但使用此选项后,我的模型数据绑定器丢失,当我选择2015年3月4日(3月4日)时,他理解4月3日,我无法选择12日之后的日期。@clement嗯,是的,可能是这样。在这种情况下,理查德的回答似乎更符合逻辑。
String.Format(new CultureInf("fr-FR")., "{0:d}", …)