繁体   English   中英

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

[英]Convert DateTime to Date string "dd/mm/yyyy"

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

您可以按原样保留列表创建,无需转换为所需格式。 所以你可以使用你的代码:

_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转换为您在视图/UI 上显示时所需的格式。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM