为什么带有DataFormatString的DisplayFormat将“/”(斜杠)更改为“ - ”(破折号)?

时间:2011-12-29 20:41:01

标签: .net asp.net-mvc-3 datetime-format

我正在使用以下代码

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

// View
@Html.EditorFor(model => model.StartDate)

格式化StartDate但结果为xx-xx-xxxx而不是xx/xx/xxxx。如何解决此问题并始终使用xx/xx/xxxx格式?

更新 将文化更改为en-US似乎有效:

var culture = new CultureInfo(userCulture);
System.Threading.Thread.CurrentThread.CurrentCulture = "en-US";
System.Threading.Thread.CurrentThread.CurrentUICulture = "en-US";

不是解决方案,因为我可能正在使用不同的文化,我仍然希望以不同的方式显示日期。

如果当前文化显示日期应显示dd-MM-yyyy,那么使用上述DisplayFormat无效,且日期不会显示为dd/MM/yyyy

3 个答案:

答案 0 :(得分:27)

请改用DataFormatString = @"{0:dd\/MM\/yyyy}"。由于/标识了应由当前区域性的默认日期分隔符替换的字符,因此您需要对其进行转义,以便将其用作格式的文字。

通过这种方式,您可以使用固定格式而不是动态使用当前文化的日期分隔符的格式。

转义/字符的替代方法可以是:DataFormatString = "{0:dd'/'MM'/'yyyy}"

答案 1 :(得分:2)

更改服务器“区域设置”的短日期格式以使用斜杠,例如yyyy/MM/dd
这解决了我的问题。

答案 2 :(得分:0)

可以将其更改为DataFormatString = "{0:d}"

这应该给你短日期模式mm / dd / year