2017-10-15 63 views
-5

如何将DateTime转换为字符串“dd/mm/yyyy”? 我遇到的问题是,由于转换是在linq表达式中,我必须使用DateTime.Value.ToString("MM/dd/yyyy")。然而,这个日期随着时间的推移而回归 - 1/21/1999 12:00:00 AM。如何直接在此查询中删除时间部分?将DateTime转换为日期字符串“dd/mm/yyyy”

_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

在你的数据库中,'PlacementStartDate'可能是数据类型'DateTime'这就是为什么 – shahsani

+0

的确是这样,但如何转换呢?我想我可以只更改数据库数据类型... – navig8tr

+2

您可以在显示日期时将其转换为“MM/dd/yyyy” - 在创建列表时不存在 – shahsani

回答

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到你需要的格式哟uare上查看/ UI显示它的时间。

+0

我宁愿在这个查询中做到这一点,如果可能的话 – navig8tr

+0

在你的'Efs07PlacementModel'中,你可以使用一些'Annotations'来设置'DisplayAs'属性为你需要的格式。 – shahsani

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