日期时间格式不正确。

3

我有一个如下所示的属性:

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

当我使用时,
@Html.DisplayFor(modelItem => item.EndDate)

我得到的结果如下:
17.07.2013 

为什么会发生这种情况?

3
+1 表示同意“gimme teh codez plz....”,意思是请求获取代码的缩写。 - Lews Therin
2
.NET DateTime 格式化将斜杠替换为当前区域设置使用的日期分隔符。通常这将是运行 asp.net 应用程序的用户的区域设置。 - Lasse V. Karlsen
我在工作中感到非常无聊,这并没有产生效果 :`( - DarthVader
您或您的用户是否使用“.”作为日期分隔符? - Panagiotis Kanavos
不应该这样做,它会进入与其他所有内容相同的格式化例程,从而替换斜杠。这里的答案是确保您的应用程序使用正确的区域设置信息运行。要么为每个人硬编码:Thread.CurrentThread.CurrentCulture = new ...,要么根据使用站点的人作出反应。 - Lasse V. Karlsen
显示剩余3条评论
1个回答

2
有几种方法可以做到这一点。
要么:
  • 更改运行 Web 应用程序的用户的区域设置
  • 在格式化时使用正确的 CultureInfo 对象
  • 在当前线程上设置默认的 CultureInfo 对象
  • 转义斜杠

在格式化时提供 CultureInfo 对象:

@Html.DisplayFor(modelItem => item.EndDate.ToString("dd/MM/yyyy", CultureInfo.GetCulture("en-US")))

设置默认的 CultureInfo 对象:
Thread.CurrentThread.CurrentCulture = CultureInfo.GetCulture("en-US");

为了避免反斜杠,使用单引号:
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd'/'MM'/'yyyy}")]

请注意,所有的代码最终都会出现在DateTime.ToString(string)或它的一个重载中,因此那里是寻找线索的地方。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接