Как подавить часть времени .NET DateTime в отображении, если и только если часть времени = 00:00:00? - PullRequest
3 голосов
/ 19 февраля 2010

На странице ASP.NET у меня есть это:

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

Я бы хотел отформатировать его как

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

тогда и только тогда, когда временной частью MyDateTime является 00:00:00. В противном случае, как это:

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

Возможно ли это и как я могу это сделать?

Спасибо за подсказки заранее!

Ответы [ 6 ]

6 голосов
/ 19 февраля 2010

Я бы добавил это в свой код:

// 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");
    }
}

И измените .aspx так:

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

Если вы делаете это в нескольких местах, рассмотрите возможность написания метода расширения для DateTime и поместите эту логику туда (возможно, с дополнительными параметрами для предоставления различных форматов и т. Д.).

1 голос
/ 19 февраля 2010

Вы не упомянули, какой язык .net вы используете. В VB.NET вы можете использовать следующее встроенное выражение:

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

Я не тестировал с C #, но, думаю, замена If(...) на троичный оператор ?: и приведение результата Eval к DateTime перед доступом к TimeOfDay должны помочь.

1 голос
/ 19 февраля 2010

не проверял, но с макушки головы:

в разметке

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

в коде позади:

protected string FormatMyDateTime(DateTime date)
{
      // Do your if else for formatting here.
}
0 голосов
/ 14 августа 2013

Показывать только часть даты

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

и показывать только часть времени

<asp:Label ID="lblStartTime" runat="server" Text='<%#Convert.ToDateTime(Eval("ExamStartTime")).ToShortTimeString()%>' />
0 голосов
/ 19 февраля 2010

Вы можете заменить следующий код в файле aspx или создать метод и вызвать метод для возврата значения.

<%
   DateTime dtTime = DateTime.Now;

    if (dtTime.TimeOfDay == TimeSpan.Zero)
        Response.Write(String.Format("{0:d}", dtTime));
    else
        Response.Write(String.Format("{0:g}", dtTime));
%>
0 голосов
/ 19 февраля 2010

Я не уверен, что вы ищете это, но я чувствую, что стоит попробовать.Надеюсь, что это работает.

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

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