将DateTime转换为日期字符串“dd / mm / yyyy”

时间:2017-10-15 19:35:25

标签: c# linq datetime

如何将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();

2 个答案:

答案 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; }