【问题标题】:Entity Framework 6 datetime issue实体框架 6 日期时间问题
【发布时间】:2015-07-26 18:42:34
【问题描述】:

从前端(视图)到后端(控制器)捕获与日期时间格式有关的用户输入时似乎存在明显问题。

我已经查看了所有内容,但找不到任何解决我正在观察的问题的方法。我将日期时间存储在数据库中。当我在文本输入中插入日期时间格式时出现问题(手动而不是使用日期选择器) 它似乎无法发布,因为它要求适当的格式。

当我选择适当的格式时,应用程序崩溃并且无法解析格式。是否有任何文章可以帮助我实现或了解日期时间格式和 EntityFramework 的工作原理?

【问题讨论】:

  • c# 不存储DateTime 类型对象的显示格式。您应该将 DateTime 对象从您的视图传递给控制器​​(这意味着您需要在视图中使用 DateTime 解析方法之一。

标签: c# asp.net-mvc entity-framework datetime


【解决方案1】:

这对我有用:

型号

[Display(Name = "Startdate")]
[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime StartedAt { get; set; }

查看

if (!Modernizr.inputtypes.date) {
    $('input[type=date]').datepicker({
        dateFormat: 'yy-mm-dd'});}

【讨论】:

  • 这有点用,但是我似乎无法随着时间的推移保存该格式,当我试图解析它时它会抛出一个转换错误
【解决方案2】:

EF 和数据库都没有问题。日期时间作为日期时间存储在数据库中,而不是任何特定的字符串格式。当您使用文本作为输入时,您有责任将其转换为有效的日期时间值。将 1/2/2015 视为一个字符串。你能说出今天是几号吗?不,你不能。可能是 2015 年 1 月 2 日或 2015 年 2 月 1 日。或者考虑 15/1/2015。对于使用其中一种欧洲文化的机器,有效日期为 2015 年 1 月 15 日,但对于美国文化而言,日期无效。如果您使用了返回 DateTime 值而不是字符串的 DateTimePicker,那么您会从一开始就阻止该问题。 您可以像这样将字符串转换为日期时间:

DateTime x;
DateTime? valueToSendToDatabase = DateTime.TryParse(txtDatetime.Text,
         CultureInfo.CurrentCulture, 
         DateTimeStyles.None, 
         out x)
         ? x
         : (DateTime?)null;

【讨论】:

  • 这更清楚了,但没有告诉我们如何在多语言环境中使用日期时间..你有一些教程的链接吗?
  • 哪部分不清楚?您可以使用任何您想要的 CultureInfo,而不是 CultureInfo.CurrentCulture。 CurrentCulture 是最简单的方法。
  • 我的意思是,获得使用“格式”属性的 DateTime 的通用解决方案会很有趣(检查问题)。
  • 您可以根据需要使用 ParseExact。或者从一开始就轻松使用 DateTimePicker。
  • 酷,将解析字符串。我必须在保存之前解析它吗?我还需要一个有时间的日期选择器将其发送到控制器。有人有什么好的建议吗? @CetinBasoz
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
  • 2018-04-25
  • 1970-01-01
  • 1970-01-01
  • 2012-08-14
  • 1970-01-01
相关资源
最近更新 更多