簡體   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