我有一个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编写的。
正如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")