【问题标题】:Display varchar Date as D/M/Y?将 varchar 日期显示为 D/M/Y?
【发布时间】:2012-01-31 21:21:37
【问题描述】:

我正在从数据库中提取一个日期,它是一个 varchar。但是在数据库中,它的格式为 Y/M/D/。我需要它在前端渲染 D/M/Y。我使用实体框架将它带入 Linq。它看起来像这样:

var startdateParam = new ObjectParameter("StartDate", typeof (string));

然后我调用存储过程:

  var webinarProducts = mgr.GetWebinars(groupCodeParam, startdateParam).ToList();

然后我将它分配到我的产品列表中:

网络研讨会.StartDate = startdateParam.Value.ToString();

最后,在 cshtml 文件中(我在 MVC3 中构建它)我显示如下:

  • @Model.StartDate
  • 但是当我发布页面时,它只是格式化为数据表 Y/M/D 中的奇怪日期。

    我试图在我的代码中转换/解析/格式化这些,但我不断收到错误。将其转换为我想要的任何日期格式的最佳方法是什么?

    【问题讨论】:

    • 什么错误?就 datetime.parse 而言,您尝试过什么?
    • 为什么你在数据库中的日期字段首先是一个varchar?如果您可以修复架构,那将是最好的方法。
    • 我可以修复它。它是客户端数据库。我什么都改变不了。
    • @Aaron:我刚从视觉工作室得到红色波浪形的。我试过了: Where(p => Convert.ToDateTime(p.StartDate) 它说这不是一个方法。在我的存储过程中有什么方法可以做到这一点吗?

    标签: c# sql asp.net-mvc-3 datetime-format


    【解决方案1】:

    使用内置解析?

    http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx

    在此处格式化字符串:http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

    webinar.StartDate = DateTime.ParseExact(startdateParam.Value.ToString(), "yyyy/MM/dd", CultureInfo.InvariantCulture);
    

    然后在前端可以指定

    @Model.ToString("dd/MM/yyyy")
    

    【讨论】:

    • 感谢 eouw0o83hf。我试过这个,我再次得到这个错误:“不能将类型为'System.DateTime'的实例分配给类型为字符串的变量。这与我尝试转换为日期时间时遇到的错误相同。
    • 复制/粘贴您用来转换为字符串的代码 - 我敢打赌我们可以调试语法错误
    • 我认为这是因为 webinar.StartDate 是一个字符串?如果是这种情况,您可能需要考虑将其更改为 System.DateTime,然后使用上面的代码。
    • var startdateParam = new ObjectParameter("StartDate", typeof (string)); var webinarProducts = mgr.GetWebinars(groupingCodeParam, startdateParam).ToList(); webinar.StartDate = DateTime.ParseExact(startdateParam.Value.ToString(), "yyyy/MM/dd", CultureInfo.InvariantCulture); StartTime 已经是一个字符串。我只是想把它改成我想要的任何日期格式。
    • 我猜 John Ruiz 是对的 - StartDate 是字符串还是 DateTime?如果您将属性更改为 DateTime,它可能会起作用。
    【解决方案2】:

    如果您可以更改架构,我会使用 DATETIME 列而不是 varchar。

    如果没有,我会使用 C# 中内置的 DateTime 函数。这段代码应该可以工作:

    DateTime dateObj = DateTime.Parse(startdateParam.Value.ToString());
    string outDateString = dateObj .ToString("dd/MM/yy");
    

    希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-08
      • 2021-11-26
      • 2011-02-19
      • 2015-10-26
      • 1970-01-01
      • 2017-11-02
      • 2018-05-25
      相关资源
      最近更新 更多