在gridview eval中比较日期时间

Comparing datetime in gridview eval

我在 gridview 中有一个标签,我在其中显示消息的发送日期时间,具体取决于消息是今天发送的还是 earlier.If 消息是今天发送的,它应该显示时间,如果它是早些时候发送的显示日期 (dd-MM-yyyy)。 SentDateTime 是给出所需日期时间的列。

我试过以下方法:

<asp:Label ID="lblMsgTime" runat="server" Text='<%# Eval("SentDateTime","{0:dd-MM-yyyy}").Equals(DateTime.Now,"{0:dd-MM-yyyy}")? Eval("SentDateTime","{0:HH:mm}"):Eval("SentDateTime","{0:dd-MM-yyyy}") %>' style="color: #FFFFFF"></asp:Label>

但抛出异常

成员 'object.Equals(object, object)' 无法使用实例引用访问;用类型名称来限定它

问题是您忘记在 DateTime.Now 上调用 ToString:

.Equals(DateTime.Now.ToString("{0:dd-MM-yyyy}"))

然而这一切都非常复杂。直接比较日期就不用比较字符串了:

<%# (DateTime)Eval("SentDateTime") == DateTime.Now ? ...

甚至这对于标记来说也太过分了。考虑将此逻辑移至代码隐藏函数:

protected string GetDateValue(DateTime sentDateTime)
{
    if (sentDateTime == DateTime.Now)
    {
        return sentDateTime.ToString("HH:mm");
    }
    else
    {
        return sentDateTime.ToString("dd-MM-yyyy");
    }
}

然后这样称呼它:

<%# GetDateValue((DateTime)Eval("SentDateTime")) %>