C#MVC如何更改模型中的日期格式?

时间:2017-08-25 17:15:52

标签: c# asp.net-mvc date datetime

我的约会有问题。

    public Nullable<System.DateTime> Date_Of_Birth {get; set;}

我想将当前格式yyyy / MM / dd 00:00:00改为dd / MM / yyyy。

我尝试了以下解决方案:

1)

    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", 
           ApplyFormatInEditMode = true)]
       public DateTime MyDateTime { get; set; }

//但是我的MVC项目甚至没有看到&#39; DisplayFormat&#39;。

2)

在我的情况下,ToString(&#34; dd / MM / yyyy&#34;)也不起作用。 示例:@ item.Date_Of_Birth.ToString(&#34; dd / MM / yyyy&#34;)

我的观点:

    @model IEnumerable<School_Project.Models.Data>

       <div id="container">
    @if (Model != null) {
    <div id="table" style="background-color: white; color:black; margin-left:5%;
        margin-top:5%; width:35%; border:solid 5px;">
    <table class="test" cellpadding="10" style="align-items:center; text-align:center; width:100%;  border-collapse: collapse; font-size:18px;">

        @foreach(var item in Model)
            {

            <tr>
                <th style="font-size:20px; text-align:left;padding:10px;">Personal Data</th>

            </tr>


            <tr >
                <td>
                    <b>Name: </b>
                </td>
                <td>@item.Name</td>
            </tr>

            <tr>
                <td>
                    <b>Date of Birth: </b>
                </td>
                <td>@item.Date_Of_Birth</td>
            </tr>

我该怎么办?

感谢您的帮助!

6 个答案:

答案 0 :(得分:1)

首先,大多数时候你不应该做任何事来获得正确的日期。了解日期始终以内部相同的格式存储,只有在显示时才会格式化。

其次,您应该将应用程序全球化设置为使用您想要的日期格式,因此您不需要专门格式化。这是一个web.config设置。

第三,显示属性仅在使用编辑器/显示模板时有效,因此必须使用@Html.DisplayFor(m => m.MyDate)来获取属性指定的格式(如果格式化,则必须使用EditorFor)。

答案 1 :(得分:0)

您可以创建一个适用于datetime和nullable类型的扩展方法。

这可能会有所帮助:

//datetime
public static string ToShortDateString(this DateTime date){
    return date.ToString("MM/dd/yyyy");
}
//nullable datetime
public static string ToShortDateString(this DateTime? date){
    if(date==null){
        return null;
    }
    return date.Value.ToShortDateString();
}

在您的代码中,您可以像这样使用它

@item.Date_Of_Birth.ToShortDateString();

答案 2 :(得分:0)

您提供的数据注释不应存在问题。我实际上只是尝试了一个自己的应用程序,它工作正常。

我在您的问题中注意到的唯一事情是您发布的视图向我们显示了一个名为Date_Of_Birth的属性..但您的数据注释位于名为MyDateTime

的属性上方

这是一个错误吗?

[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public Nullable<System.DateTime> Date_Of_Birth{ get; set; }

如果有帮助,请告诉我。

答案 3 :(得分:0)

我使用这两种方式(解决)来格式化MVC中的日期字符串。

  1. 创建Html帮助扩展方法(类似于超级用户提出的方法)

    public static string FormatDate(this HtmlHelper helper, Datetime? date)
    {
        //your own method to convert nullable date to short date string 
    
    }
    
  2. 并在您的html页面中包含扩展方法所在的目录,例如:

        @using YourApp.HtmlHelpers
    

    并使用它:

    @Html.FormatDate(Model.Date_Of_Birth);
    
    1. 在模型类中创建另一个属性以返回格式化的日期字符串(可能是个糟糕的主意)。在视图页面中,只需使用此属性而不是datetime属性,例如:

      public string FormattedDate {
          get { return Date_Of_Birth.Value.ToString("dd/MM/yyyy");}
      }
      

答案 4 :(得分:0)

解决方案是创建特殊方法:

//nullable datetime
public static string ToShortDateString(this DateTime? date){
    if(date==null){
        return null;
    }
    return date.Value.ToShortDateString();
}

非常快速的答案,不同的想法和分享,非常感谢@Super User,@ Amy和其他人!

@Tiramonium你也有权声明

  using System.ComponentModel.DataAnnotations;

答案 5 :(得分:-1)

因为您使用的是可空类型,所以不能将格式字符串与toString方法一起使用。需要做像

这样的事情
(Date_Of_Birth.HasValue)?Date_Of_Birth.Value.ToString("dd/MM/yyyy"):Date_Of_Birth
在你看来