2011-01-27 71 views
-1

我有一个DDL(下拉列表),它显示表中的日期,DDL用于过滤表中显示的项目。表格工作,过滤器工作,唯一的丑陋的事情是过滤器显示时间与日期:02/12/2010 12:00:00:00:00AM或类似的东西,我试图放弃时间它来自表格,但如果有更好的方式,请帮助, 我已经尝试了以下内容:在控制器=> string.format:告诉我,它不是一个有效的SQL有史以来.... ToString(“MM/dd/yyyy“,n)告诉我相同的,我也尝试过转换(varchar(12),n,101)认为它可能需要sql服务器,但它也没有那样,我甚至试图添加一个格式视图文件中的DDL键,正如我预料的那样,它表示找不到那个键。我该如何从datetime中删除时间

// 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'?或者如何才能做到这一点?或者我做错了什么? .....谢谢

+0

你有没有尝试使用odb datetime格式? “YYYY-MM-DDTHH:MI:SS” – ykatchou 2011-01-27 21:09:15

+0

可以解释如何做到这一点,你的感谢当 – kyle 2011-01-27 21:14:59

回答

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); 

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

0

我认为你没有看到你真正得到的数据类型。 “02/12/2010 12:00:00:00:00AM”的输出看起来像有些字符正在调用.ToString()后面的类型,最终将这些类型解除绑定到DateTime数据类型。

基于为你把你的描述的限制,试着

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

也许你得到幸运和工作。或尝试一些矫枉过正这一点:

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

威瑟方式,这两个例子都是非常糟糕的代码,它只是使你开始解决这个问题(即在第二个例子中使用的TryParse(),或使用“作为第一个例子中的关键字)。在你的清理版本中使用完整的错误检查,包括检查空/空/ DBNull.Value值。

在这两种情况下,重点是找出您正在获取的真正数据类型(可能是Object?),然后转换/转换它,以便您可以根据自己的需要进行格式化。

2

你应该理解的一点是,SQL和CLR DateTime类型实际上都是作为一个整数存储的,它包含相对于“纪元”的“ticks”的数量。因此,时间与这个层次的日期是分不开的;表示日期和时间的值可以被一天中的滴答数简单地整除。没有CLR类型只是一个日期。

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

0

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

您需要整理表示层中的格式,以便只显示日期。

0

.ToString该方法接受一个可选多功能格式化参数。

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

在下面的例子中,我acheive以下目标:

  1. 设置基于是否存在TARGET_DATE会话参数的TargetDate属性。

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

  3. 我创建的字符串的新列表和复制日期时间的清单,将所需的格式。字符串的

  4. 列表然后resady用作数据源的下拉列表。

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

代码

已经编辑提供的代码,请使用以下修改的代码:

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; 

我要把它留给你,以减少和编码格式,以您的喜好。