只显示日期,不显示时间

Posted

技术标签:

【中文标题】只显示日期,不显示时间【英文标题】:Display only date and no time 【发布时间】:2011-10-30 18:23:41 【问题描述】:

在 MVC razor 中,我像这样将当前日期放入数据库中..

model.Returndate = DateTime.Now.Date.ToShortDateString();

由于数据库字段是日期时间数据类型,并且我正在将当前日期转换为字符串格式,所以这不起作用.. 我该怎么做?我正在使用字符串格式,因为我想要 mm/dd/yyyy 格式的日期,而不是 mm/dd/yyyy hh:mm:ss 时间格式..

编辑:

在控制器中我有

var model = new ViewModel();
model.ReturnDate = DateTime.Now;            
return PartialView("PartialView", model);  

在部分视图中,我有

@html.EditorFor(model => model.Returndate)

这是将日期显示为日期和时间的地方...我只想显示日期。不是时候。我希望这个编辑能更好地解释。

【问题讨论】:

不用担心 00:00:00(午夜)。只需格式化输出 ToString("mm/dd/yyyy"); 即可准确查看您想要的内容。 将数据库中的数据保存为DateTime。您在 OUTPUT 上进行字符串格式化...仅将其格式化为最终查看器。 【参考方案1】:

只需自己处理这种情况 - 找到了一种非常简单的方法,只需像这样在模型中注释您的属性:

[DataType(DataType.Date)]
public DateTime? SomeDateProperty  get; set; 

它也会从日期选择器中隐藏时间按钮。

对不起,如果这个答案有点晚了;)

【讨论】:

非常感谢。这对我很有帮助! +1 正是我所需要的。太棒了! 我最近有一个位置,当输入类型是日期时,chrome 会在其中放入有趣的东西,我认为是 html5 的一部分,我想改用 jquery datepicker,所以我选择了 DataType.Text - 这仍然允许我使用足够酷的格式 不必为迟到而道歉,发布老问题的答案对于非 OP 的人来说是一个很大的帮助。这是我一直在寻找的答案,因为我知道这是可能的,但不记得如何了,你在 3 年前发布了它。如果有的话,你来得太早了。 如果日期来自数据库,我不知道这有什么帮助......无法弄清楚【参考方案2】:

如果 SQL 中的列类型是 DateTime,那么它将存储一个您是否通过的时间。

最好把日期保存好:

model.ReturnDate = DateTime.Now;

然后在需要显示的时候格式化:

@Html.Label(Model.ReturnDate.ToShortDateString())

或者,如果您使用的是 EditorFor:

@Html.EditorFor(model => model.ReturnDate.ToShortDateString())

@Html.EditorFor(model => model.ReturnDate.ToString("MM/dd/yyyy"))

要向模型添加属性,请添加以下代码:

public string ReturnDateForDisplay

    get
    
       return this.ReturnDate.ToString("d");
    

然后在您的 PartialView 中:

@Html.EditorFor(model => model.ReturnDateForDisplay)

编辑:

我只是想澄清这个答案,即我所说的“如果您使用的是 EditorFor”,这意味着您需要有一个 EditorFor 模板,用于您尝试表示的值的类型。

编辑器模板是在 MVC 中管理重复控件的一种很酷的方式:

http://coding-in.net/asp-net-mvc-3-how-to-use-editortemplates/

您可以将它们用于像我在上面所做的 String 这样的幼稚类型;但它们特别适合让您为更复杂的数据类型模板化一组输入字段。

【讨论】:

不确定谁反对这个.. 但我没有使用 HTML.label 来显示这个.. 我正在使用 HTML.EditorFor(model => model.Returndate) 如何格式化显示这个案子…… 这只是如何格式化结果的示例;我会更新我的答案。 我认为如果该值逻辑上只是一个日期,那么也值得只存储日期部分,即使无论如何时间都会被剥离。 @Russ:您所做的更新编辑器不起作用。它给了我一个错误“模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。” 你应该从答案中删除 '@Html.EditorFor(model => model.ReturnDate.ToShortDateString())' 因为这不起作用。【参考方案3】:

如果你想在 TextBox 中显示,这很有效:

@Html.TextBoxFor(m => m.Employee.DOB, "0:dd-MM-yyyy")

【讨论】:

如果浏览器在设置中的格式与“dd-MM-yyyy”不同,即“MM-dd-yyyy”,日期将显示不正确【参考方案4】:

日期库中的日期/时间根本不是格式化 版本。它只是日期/时间本身。从数据库中提取值时如何显示该日期/时间是另一回事。我强烈怀疑你真的只是想要:

model.Returndate = DateTime.Now.Date;

或者可能

model.Returndate = DateTime.UtcNow.Date;

是的,如果您使用 SQL Server Studio 或其他工具查看数据库,您现在会看到午夜 - 但这无关紧要,当您从数据库中获取日期并将其显示给用户时,然后 你可以应用相关的格式。

编辑:关于您编辑的问题,问题不在于模型 - 这是您指定视图的方式。你应该使用类似的东西:

@Html.EditorFor(model => model.Returndate.Date.ToString("d"))

其中d 是短日期模式的standard date and time format specifier(这意味着它将考虑当前的文化设置)。

这就是我反复说的一点 - 当您向用户显示日期/时间时,就是将其格式化为没有时间的日期的时间。

编辑:如果这不起作用,应该有一种用格式字符串装饰模型或视图的方法 - 或类似的东西。我不是真正的 MVC 人,但感觉 应该 是一种以声明方式执行此操作的好方法...

【讨论】:

DateTime.Now.Date 仍然显示时间和日期。 @ZVenue:显示在哪里?您应该存储 DateTime 值,并在显示 日期的任何位置使用仅日期格式说明符。您给出的代码(在模型中设置属性)大概是用于存储的,所以它有一个午夜的时间并不重要。 Jon 建议我在说什么,将日期保存到 SQL 中;然后,您可以在打印时适当地格式化您的日期。 @Jon:当我将您的编辑代码用于 html.editorfor... 时出现此错误。“模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式"....在运行时 @ZVenue:也看看这个:***.com/questions/5033902/…【参考方案5】:

您可以如下修改您的 ViewModel:

[DisplayFormat(DataFormatString = "0:dd/MM/yyyy",ApplyFormatInEditMode = true)]

【讨论】:

这个方案也解决了Chrome的datepicker冲突问题。如果您只是在 Viewmodel 中指定 Datatype.Date,Chrome 会在文本框中使用自己的 datepicker 版本。谢谢!【参考方案6】:

您可以使用ToString 应用自定义日期时间格式,例如:

DateTime.Now.Date.ToString("MM/dd/yyyy");

关于DateTime.ToString 格式模式的进一步阅读可以找到here 和here。

编辑:编辑问题后,就像其他建议一样,您应该在视图中应用日期格式:

model.Returndate = DateTime.Now.Date;

@Html.EditorFor(model => model.Returndate.Date.ToString("MM/dd/yyyy"))

【讨论】:

这无助于保存日期的问题。 他不能通过调用model.Returndate.ToString("mm/dd/yyyy")来保存它吗? 那是个问题。我将该值放在数据库中的日期时间字段中。所以这不起作用..请参阅我的原始帖子。 不应该是.ToString("MM/dd/yyyy")吗? mm 是分钟,而不是月! @Bodrich:谢谢,更新了,不过我只是复制粘贴他的模式。【参考方案7】:

如果你有一个如下的 for 循环。

将@item.StartDate 更改为@item.StartDate.Value.ToShortDateString()

这将删除时间,以防您无法像我一样在模型中注释您的属性。

<table>
  <tr>
   <th>Type</th>
   <th>Start Date</th>
  </tr>
    @foreach (var item in Model.TestList) 
      <tr>
        <td>@item.TypeName</td>
        <td>@item.StartDate.Value.ToShortDateString()</td>
      </tr>
      
</table>

【讨论】:

【参考方案8】:

在 Razor 中我不确定,但在 ASPX 中你可以:

 <%if (item.Modify_Date != null)
  %>
     <%=Html.Encode(String.Format("0:D", item.Modify_Date))%>     
<% %>

Razor 中一定有类似的东西。希望这会对某人有所帮助。

【讨论】:

是的,这也适用于 Razor 语法,例如@Html.Encode(string.Format("0:D", item.Modify_Date))【参考方案9】:

包括 DisplayFormat 和 ApplyFormatInEditMode 等数据注释以获得所需的输出。

[Display(Name = "Bill Date")] [DataType(DataType.Date)] [DisplayFormat(DataFormatString = "0:dd/MM/yyyy", ApplyFormatInEditMode = true)] public DateTime BillDate get; set;

现在您的账单日期将显示为。

【讨论】:

请查看其他答案。您认为您的帖子是否有必要并在帖子中添加了一些新的优质内容?【参考方案10】:

您可以简单地转换日期时间。比如:

@Convert.ToString(string.Format("0:dd/MM/yyyy", Model.Returndate))

【讨论】:

谢谢@ANJYR,这个对我有用。我正在为 DateTime 字段使用 PickADay 库。也许这就是为什么任何其他提议的解决方案都适用于我的案例。【参考方案11】:

我在使用此页面上的其他解决方案时遇到了一些问题,所以我想将其放入。

@Html.TextBoxFor(m => m.EndDate, "0:d", new  @class = "form-control datepicker" )

所以你只需要在第二个参数中添加“0:d”就可以了。

【讨论】:

以上是关于只显示日期,不显示时间的主要内容,如果未能解决你的问题,请参考以下文章

windows10如何设置只显示时间不显示日期

windows10如何设置只显示时间不显示日期

数据库中数据类型为datatime时,如何只显示日期或者只显示时间,不一起显示行不,需要涉及到程序吗?求解

怎么让win7右下角只显示时间不显示日期 ?(可行)

android有月份选择器吗?或者怎么让日期选择器的日期不显示,只显示年份和月份

java获取的日期只显示年月日不显示时分秒,怎么处理