我设置了一个Web API,用于通过实体框架在我的网站上显示信息。我正在过滤数据,因此它只会拉回我想要的特定部分,其中包括一个DateTime
值。
[HttpGet]
public IEnumerable<Log> XmlLog()
{
var userLog = _db.Logs.Where(x => x.EngineType == "Xml");
return userLog .ToList();
}
这将我的日期显示为:
2019-02-05T15:11:50.39
我需要做的是将DateTime
格式更改为其他格式。理想情况下:
Saturday 2 February 9:12:30
在linq通话中,我尝试了以下操作:
[HttpGet]
public IEnumerable<Log> XmlLog()
{
var userLog = _db.Logs.Select(d => d.LogDate.ToString("f")).Where(x => x.EngineType == "Xml");
return userLog .ToList();
}
在模型本身上,我尝试了以下属性:
[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:yyyy/MM/dd HH:mm:ss}")]
public DateTime LogDate { get; set; }
我的任何尝试都没有成功。我在陈述中做错了什么?
以上内容是用DotNet 4.7而不是DotNetCore编写的。
答案 0 :(得分:2)
正如John所评论的那样,您的LINQ应该抛出异常,因为您首先选择字符串,然后尝试像对待对象一样过滤它们。
但是无论如何,这种方法都是倒退的。这只是关于获取数据的信息,因此它应该保持原样,而不进行任何格式化。让您的视图层负责格式化。
DisplayFormat
属性非常有用,但前提是您使用的是Html.DisplayFor
/ Html.EditorFor
助手。如果您认为自己只是在做@Model.LogDate
之类的事情,请考虑以您需要的格式调用ToString(format)
。
最后,您的格式与您希望的示例不同。您要寻找的正确格式是:dddd, dd MMMM HH:mm:ss
。
总而言之,保留过滤器不变,并在此注释中使用DisplayFor
:
[DataType(DataType.DateTime)]
[DisplayFormat(DataFormatString = "{0:dddd, dd MMMM HH:mm:ss}")]
public DateTime LogDate { get; set; }
...
@Html.DisplayFor(m => m[i].LogDate)
或者不用理会任何注释,只需使用
@Model[i].LogDate.ToString("dddd, dd MMMM HH:mm:ss")