문제

In an ASP.NET page I have this:

<asp:Label ID="MyDateTimeLabel" runat="server" 
     Text='<%# Eval("MyDateTime") %>' />

I'd like to have it formatted like

... Eval("MyDateTime", "{0:d}") ... // Display only the date

if and only if the time part of MyDateTime is 00:00:00. Otherwise like this:

... Eval("MyDateTime", "{0:g}") ... // Display date and time in hh:mm format

Is this possible and how can I do that?

Thank you for hints in advance!

도움이 되었습니까?

해결책

I'd put this in my code-behind:

// This could use a better name!
protected string FormatDateHideMidnight(DateTime dateTime) {
    if (dateTime.TimeOfDay == TimeSpan.Zero) {
        return dateTime.ToString("d");
    } else {
        return dateTime.ToString("g");
    }
}

And change the .aspx to call that:

<asp:Label ID="MyDateTimeLabel" runat="server" 
     Text='<%# FormatDateHideMidnight((DateTime)Eval("MyDateTime")) %>' />

If you do this in multiple places, consider writing an extension method for DateTime and put this logic there (perhaps with additional parameters to supply different formats, etc.).

다른 팁

You did not mention which .net language you use. With VB.NET, you can use the following inline expression:

... Text='<%# Eval("MyDateTime", If(Eval("MyDateTime").TimeOfDay = TimeSpan.Zero, "{0:d}", "{0:g}")) %>'

I did not test with C#, but I guess replacing If(...) with the ternary ?: operator and casting the result of Eval to a DateTime before accessing TimeOfDay should do the trick.

didn't test, but off the top of my head:

in markup

<asp:Label ID="MyDateTimeLabel" runat="server" 
     Text='<%# FormatMyDateTime((DateTime)Eval("MyDateTime")) %>' />

in code-behind:

protected string FormatMyDateTime(DateTime date)
{
      // Do your if else for formatting here.
}

You can substitute the following code in the aspx file or create a method and call the method to return the value.

<%
   DateTime dtTime = DateTime.Now;

    if (dtTime.TimeOfDay == TimeSpan.Zero)
        Response.Write(String.Format("{0:d}", dtTime));
    else
        Response.Write(String.Format("{0:g}", dtTime));
%>

To show only date part

<asp:Label id="lblExamDate" runat="server" Text='<%#Convert.ToDateTime(Eval("theExamDate.Date")).ToShortDateString()%>'></asp:Label>

and to show only time part

<asp:Label ID="lblStartTime" runat="server" Text='<%#Convert.ToDateTime(Eval("ExamStartTime")).ToShortTimeString()%>' />

I am not sure if you are looking for this, but I feel it's worth trying. Hope it works.

<%# String.Format(Eval("MyDateTime"),"{0:d}") %>

<%# String.Format(Eval("MyDateTime"),"{0:g}") %>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top