我遇到以下问题:
有时,我的数据库中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
!!
答案 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 HRS
中hh
表示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();
}