Как подавить часть времени в .NET DateTime на дисплее тогда и только тогда, когда часть времени = 00:00:00?
-
21-09-2019 - |
Вопрос
На странице 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
Возможно ли это и как я могу это сделать?
Спасибо за подсказки заранее!
Решение
Я бы поместил это в свой код:
// 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
и поместите туда эту логику (возможно, с дополнительными параметрами для предоставления разных форматов и т. д.).
Другие советы
Вы не указали, какой язык .net вы используете.В VB.NET вы можете использовать следующее встроенное выражение:
... Text='<%# Eval("MyDateTime", If(Eval("MyDateTime").TimeOfDay = TimeSpan.Zero, "{0:d}", "{0:g}")) %>'
Я не тестировал С#, но думаю заменить If(...)
с тройным ?:
оператор и приведение результата Eval
к DateTime
перед доступом TimeOfDay
должен сделать свое дело.
не проверял, но из головы:
в разметке
<asp:Label ID="MyDateTimeLabel" runat="server"
Text='<%# FormatMyDateTime((DateTime)Eval("MyDateTime")) %>' />
в коде программной части:
protected string FormatMyDateTime(DateTime date)
{
// Do your if else for formatting here.
}
Вы можете заменить следующий код в файле 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));
%>
Чтобы показать только часть даты
<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()%>' />
Я не уверен, ищете ли вы это, но я считаю, что стоит попробовать.Надеюсь, что это работает.
<%# String.Format(Eval("MyDateTime"),"{0:d}") %>
<%# String.Format(Eval("MyDateTime"),"{0:g}") %>