如何将DateTime转换为字符串“dd / mm / yyyy”?
我遇到的问题是,由于转换是在linq表达式中,我必须使用DateTime.Value.ToString("MM/dd/yyyy")
。但是,日期会随时间变回 - 1/21/1999 12:00:00 AM
。如何直接在此查询中删除时间部分?
_unitOfWork.PlacementFinancialViewRepository.GetEfs07Placements()
.Where(x => x.FiscalYear == fiscalYear && x.ResponsibleSauId == responsibleDistrictId)
.ToList()
.Select(x => new Efs07PlacementModel
{
PlacementStartDate = x.PlacementStartDate == null
? null
: x.PlacementStartDate.Value.ToString("MM/dd/yyyy"),
PlacementEndDate = x.PlacementEndDate == null
? null
: x.PlacementEndDate.Value.ToString("MM/dd/yyyy")
})
.ToList();
答案 0 :(得分:0)
您可以按原样保留列表创建,不会转换为所需格式。所以你可以使用代码:
_unitOfWork.PlacementFinancialViewRepository.GetEfs07Placements().Where(x => x.FiscalYear == fiscalYear && x.ResponsibleSauId == responsibleDistrictId)
.ToList()
.Select(x => new Efs07PlacementModel
{
PlacementStartDate = x.PlacementStartDate == null ? null : x.PlacementStartDate,
PlacementEndDate = x.PlacementEndDate == null ? null : x.PlacementEndDate
}).ToList();
然后,您可以在您在视图/用户界面上显示时将PlacementStartDate
转换为所需的格式。
答案 1 :(得分:0)
DateTime对象是自公元0001年1月1日午夜起经过的毫秒数。实际上,您正在对一个数字进行排队并自动将其转换为DateTime(基本上)。如果您的数据库已经保存了当天而不是时间,那么将导致将这些毫秒设置为0.这是因为您只是没有添加表示时间的毫秒数。
正如其他人所说,你可以忽略时间或确保它总是设置为午夜。然后在您的显示器中设置格式。
我建议您使用System.ComponentModel.DataAnnotations
在模型对象中执行此操作。
[DisplayFormat(DataFormatString = "{0:dd/mm/yyyy}", ApplyFormatInEditMode = true)]
这样您就可以在视图中使用@Html.DisplayFor(x => x.DateTimeObject)
并设置格式。
<强>更新强>
此外,您可以在对象模型中添加属性[DataType(DataType.Date)]
。这不会改变EF6数据在数据库中的存储方式,也不会改变默认情况下的显示方式。其他一些ORM可能不会这样做,所以请阅读你的ORM。
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}", ApplyFormatInEditMode = true)]
[DataType(DataType.Date)]
public DateTime PlacementStartDate { get; set; }