报告中的空日期时间

时间:2013-05-13 10:46:28

标签: c# asp.net datetime telerik telerik-reporting

我遇到以下问题:

有时,我的数据库中trans_in(DateTime)的值为:1900-01-01 00:00:00.000

它出现在我的telerik报告中,如12:00 AM我希望将文本框显示为空,所以我创建了以下自定义方法:

  public static string NotAttend(DateTime trans_in)
        {
            if (trans_in == null || trans_in.ToString().Trim() == "1900-01-01 00:00:00.000")
            {
                return string.Empty;
            }
            else
                return trans_in.ToShortTimeString();
        }

并像这样绑定文本框:

= OvertimeReports.CustomExpressions.NotAttend(Fields.trans_in)

但这没有解决我的问题仍然出现12:00 AM !!

4 个答案:

答案 0 :(得分:2)

您的trans_in.ToString()会根据您当前的文化向您返回DateTime对象的字符串表示形式,如果您检查DateTime,则会更好:

public static string NotAttend(DateTime trans_in)
{
   if(trans_in == new DateTime(1900, 1, 1))
   {
        return string.Empty;
   }
    else
        return trans_in.ToShortTimeString();
}

答案 1 :(得分:1)

此处的问题更多是.ToString转化

的格式问题

尝试在此

的.ToString重载中使用您需要的特定格式

trans_in("yyyy-M-d HH:mm:ss.fff")

所以在这个HH的情况下你可以把它当作00:00而不是12:00

更好的方法是将其比较为DateTime为1900-1-1制作一个DateTime obj,然后将其与trans_in.Date部分进行比较,这不会涉及此字符串格式问题

答案 2 :(得分:1)

尝试将trans_in与default(new DateTime())

进行比较

您不应该将日期与字符串进行比较而不进行格式化

参考: http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/d0f4578c-0585-4f38-95be-569a90ebeb21/

编辑:我在这里看到你最好与DateTime.MinValue比较 Determining whether the new date is the default new DateTime() or not

答案 3 :(得分:1)

您可以使用DateTime的重写功能为DateTime.ToString()提供格式。 HH表示24 HRShh表示12 HRS格式的时间:

 public static string NotAttend(DateTime trans_in)
 {
   if (trans_in == null || 
       trans_in.ToString("yyyy-MM-dd HH:mm:ss.fff") == "1900-01-01 00:00:00.000")
     {
       return string.Empty;
     }
   else
    return trans_in.ToShortTimeString();
  }