DateTime的文本框格式错误

Bee*_*jee 7 c# asp.net-mvc datetime-format

我知道这是最常见的问题之一.我有解决方案,但我目前的项目让我疯了.我使用完全相同的代码,但结果仍然不同.

这是我通常用来格式化日期的代码:

@Html.TextBoxFor(m => m.DateOfAgenda, "{0:dd/MM/yyyy}")
Run Code Online (Sandbox Code Playgroud)

通常这应该导致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*/
Run Code Online (Sandbox Code Playgroud)

所以我的代码似乎部分工作只有' - '不会被'/'取代有人知道如何一劳永逸地处理这个问题吗?

编辑

我有自定义代码设置文化.它使用路由将其设置为特定的文化(默认为'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());
}
Run Code Online (Sandbox Code Playgroud)

更具体地说,这一行打破了格式

Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(language.ToString());
Run Code Online (Sandbox Code Playgroud)

有人知道为什么吗?我希望它{0:dd/MM/yyyy}具有优先权,因为它是明确设置的.有趣的是,/它只是被翻译成了-.当我使用{0:dd//MM//yyyy}它时结果19--10--2014.

编辑

很抱歉我迟到了,但我找不到时间尝试这个.所以基本上问题是文化和我的格式设置.

@Html.TextBoxFor(m => m.DateOfAgenda, "{0:dd/MM/yyyy}")
Run Code Online (Sandbox Code Playgroud)

'/'仍会被您的文化指定的分隔符取代.我的文化被设置为'nl',但默认情况下会产生'nl-nl',他们使用' - '作为日期分隔符.我住在比利时'nl-be',在这里我们使用'/'.可以设置我的文化或改变格式.下面的代码完成了诀窍.

@Html.TextBoxFor(m => m.DateOfAgenda, "{0:dd'/'MM'/'yyyy}")
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 5

我对ASP.NET MVC并不熟悉,但如果您没有指定格式,DateTimeFormat则使用您当前的文化.另外,/在.NET中是一个特殊的格式说明符,意思是"用当前DateTimeFormat的日期分隔符替换我,这似乎是-.

因此,您应该使用以下方式提供CultureInfo.InvariantCulture或屏蔽格式说明符\\/:

@Html.TextBoxFor(m => m.DateOfAgenda, "{0:dd\\/MM\\/yyyy}")
Run Code Online (Sandbox Code Playgroud)

或者使用字符文字'/':

@Html.TextBoxFor(m => m.DateOfAgenda, "{0:dd'/'MM'/'yyyy}")
Run Code Online (Sandbox Code Playgroud)

阅读:"/"自定义格式说明符