我知道这是最常被问到的问题之一。 我有解决方案,但我目前的项目让我抓狂。 我使用完全相同的代码,但结果仍然不同。
这是我通常用来格式化日期的代码:
@Html.TextBoxFor(m => m.DateOfAgenda, "{0:dd/MM/yyyy}")
通常这应该导致 07/10/2014 但由于某种原因它导致 07-10-2014 当我在另一个项目中测试它时,上面的代码按预期工作。
作为测试,我比较了以下几行的结果:
@Html.TextBoxFor(m => m.DateOfAgenda, "{0:dd/MM/yyyy}")
/* result: 07-10-2014*/
@Html.TextBoxFor(m => m.DateOfAgenda)
/* result: 7-10-2014 00:00:00*/
所以我的代码似乎只部分工作,'-' 不会被 '/' 替换 有人知道如何一劳永逸地处理这个问题吗?
编辑
我有自定义代码设置文化。 它使用路由将其设置为特定文化(默认为“nl”) 当我将下面的代码放在评论中时,一切似乎都有效。 但是我需要这部分来加载我的资源(标签文本、错误……)。
var language = handler.RequestContext.RouteData.Values["language"];
if (language != null)
{
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(language.ToString());
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language.ToString());
}
更具体地说,这一行打破了格式
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language.ToString());
有人知道为什么吗?我希望 {0:dd/MM/yyyy}
具有优先权,因为它是明确设置的。
有趣的是 /
只是被翻译成 -
。
当我使用 {0:dd//MM//yyyy}
时,结果为 19--10--2014
。
编辑
抱歉我回复晚了,但我没时间试一试。 所以基本上问题出在文化和我的格式设置上。
@Html.TextBoxFor(m => m.DateOfAgenda, "{0:dd/MM/yyyy}")
'/' 仍然会被您的文化指定的分隔符所取代。 我的文化设置为“nl”,但默认情况下这会导致“nl-nl”,他们使用“-”作为日期分隔符。我住在比利时“nl-be”,在这里我们使用“/”。 可以设置我的文化或更改格式。 下面的代码起到了作用。
@Html.TextBoxFor(m => m.DateOfAgenda, "{0:dd'/'MM'/'yyyy}")
最佳答案
我不太熟悉 ASP.NET MVC,但如果您不指定格式,则会使用您当前区域性的 DateTimeFormat
。此外,/
是 .NET 中的特殊格式说明符,这意味着“用当前的 DateTimeFormat
日期分隔符替换我,它似乎是 -
.
因此您应该提供 CultureInfo.InvariantCulture
或使用 \\/
代替格式说明符:
@Html.TextBoxFor(m => m.DateOfAgenda, "{0:dd\\/MM\\/yyyy}")
或者使用字 rune 字'/'
:
@Html.TextBoxFor(m => m.DateOfAgenda, "{0:dd'/'MM'/'yyyy}")
关于c# - DateTime 的文本框格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26455581/