我怎样才能从日期时间中删除时间

时间:2011-01-27 21:07:38

标签: c# sql-server model-view-controller

mvc - c# - aspx => 我有一个DDL(下拉列表),它显示表中的日期,DDL用于过滤表中显示的项目。表工作,过滤器工作,唯一的丑陋的事情是过滤器显示日期的时间:02/12/2010 12:00:00:00:00AM或类似的东西,我试图把时间减少为它来自表格,但如果有更好的方法,请帮助, 我尝试了以下内容:在controller => string.format:告诉我它不是一个有效的sql什么.... ToString(“MM / dd / yyyy”,n)告诉我同样的,我也试过转换(varchar(12),n,101)思考它可能需要sql服务器,但它也不喜欢,我甚至尝试在视图文件中添加一个格式到DDL键,并且正如我所料,它说它无法找到该键的任何内容。

// target date -- this code is from my controller

    if ((Request.Form["TARGET_DATE"] != null) && Request.Form["TARGET_DATE"] != "")
    {
        TargetDate = Request.Form["TARGET_DATE"];
        ViewData["TARGET_DATE"] = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE", TargetDate);
        predicate = predicate.And(p => p.TARGET_DATE == Convert.ToDateTime(TargetDate));
    }
    else
    {
        TargetDate = null;
        ViewData["TARGET_DATE"] = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE");
    }

有没有办法格式化'n'跟随'MM / dd / yyyy'?或者如何才能做到这一点?或者我做错了什么? .....谢谢

5 个答案:

答案 0 :(得分:2)

你应该理解的是,SQL和CLR DateTime类型实际上都存储为一个整数,其中包含相对于“epoch”的“ticks”数。因此,时间与这一级别的日期不可分割;表示日期和时间的值只能被一天中的刻度数整除。没有CLR类型只是一个日期。

要“忽略”将其转换为字符串的时间,您可以使用DateTime的ToString()重载:Convert.ToDateTime(TargetDate).ToString("MM/dd/yyyy");但是,除非您已经对p.TARGET_DATE执行了此操作,否则您的比较可能会失败

答案 1 :(得分:0)

我认为您没有看到您真正获得的数据类型。 “02/12/2010 12:00:00:00:00AM”的输出看起来像somethign在一个类型的幕后调用.ToString()最终解除对DateTime数据类型的打开。

根据您在说明中的限制,尝试

((DateTime)ViewData["TARGET_DATE"])).ToString("MM/dd/yyyy")

也许你很幸运,这很有效。或尝试一些矫枉过正:

DateTime.Parse(ViewData["TARGET_DATE"].ToString()).ToString("MM/dd/yyyy")

无论如何,两个示例都是非常糟糕的代码,只是为了让您开始解决问题(即,在第二个示例中使用TryParse(),或者在第一个示例中使用“as”关键字)。在已清理的版本中,使用完整的错误检查,包括检查null / empty / DBNull.Value值。

在这两种情况下,关键是要弄清楚你得到的真实数据类型(也许是对象?),然后转换/转换它,这样你就可以按照你真正想要的格式化它。

答案 2 :(得分:0)

从数据库出来的“丢弃时间”只会将时间分量设置为0 - 即午夜或12:00:00.000 AM。

您需要在表示层中对格式进行分类,以便仅表示日期。

答案 3 :(得分:0)

感谢每一位帮助过的人......我终于能够在我的下拉列表(DDL)中没有时间显示日期。这就是我做到的。

        if ((Request.Form["TARGET_DATE"] != null) && Request.Form["TARGET_DATE"] != "")
    {
        TargetDate = Request.Form["TARGET_DATE"];

        IEnumerable<SelectListItem> tarDate =
            from n in _db.ACTION_PLANs
            select new SelectListItem
            {
                Selected = (TargetDate == n.TARGET_DATE.Date.ToString()),
                Text = string.Format("{0:MM/dd/yyyy}", n.TARGET_DATE.Date),
                Value = n.TARGET_DATE.ToString(),
            };


        ViewData["TARGET_DATE"] = tarDate;

        predicate = predicate.And(p => p.TARGET_DATE.ToString() == TargetDate);

我希望这也有助于其他有同样问题的人。

答案 4 :(得分:0)

.ToString方法接受可选的通用格式参数。

要删除输出字符串中的时间组件,您可以使用.ToString("MM/dd/yyyy")

示例

在以下示例中,我实现了以下目标:

  1. 根据TARGET_DATE会话参数是否存在来设置TargetDate属性。

  2. 创建DateTime的初始List,并使用基于linq查询的TARGET_DATE会话参数的结果填充它。

  3. 我创建了一个新的字符串列表并复制了日期时间列表,并应用了所需的格式。

  4. 然后将字符串列表重新用作下拉列表的数据源。

  5. 我不确定基于TARGET_DATE会话参数的设置变量predicate的代码行的目的。我留下它以防周围的代码需要它。

  6. <强>代码

    编辑了提供的代码后,请使用以下修订代码:

    bool IsDateset = (Request.Form["TARGET_DATE"] != null) && Request.Form["TARGET_DATE"] != "";
    
    TargetDate = IsDateset ? Request.Form["TARGET_DATE"] : null;
    
    List<DateTime> TargetDatesAsDateTime = null;
    
    if (IsDateset)
    {
        List<DateTime> TargetDatesAsDateTime = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE", TargetDate);
    
        predicate = predicate.And(p => p.TARGET_DATE == Convert.ToDateTime(TargetDate)); // I'm unsure as to the purpose of this line of code. I left it in in case the surrounding code requires it.
    
    }
    else
    {
        List<DateTime> TargetDatesAsDateTime = new SelectList((from n in _db.ACTION_PLANs select n).ToList(), "TARGET_DATE", "TARGET_DATE");
    
    }
    
    List<string> TargetDateAsString = new List<string>();
    
    if(TargetDatesAsDateTime != null || TargetDatesAsDateTime.Count > 0)
    {           
        foreach(DateTime d in TargetDatesAsDateTime)
        {
            string s = d.ToString("dd/MM/yyyy");
    
            TargetDateAsString.Add(s);
    
        }
    
    }
    
    ViewData["TARGET_DATE"] = TargetDatesAsString;
    

    我会留给您根据您的喜好缩小和格式化代码。