在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
这可能吗?我该怎么做?
感谢您提前提示!
答案 0 :(得分:6)
我把它放在我的代码隐藏中:
// 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
编写an extension method并将此逻辑放在那里(可能还有其他参数来提供不同的格式等)。
答案 1 :(得分:1)
没有测试,但是从我的头顶开始:
标记中的
<asp:Label ID="MyDateTimeLabel" runat="server"
Text='<%# FormatMyDateTime((DateTime)Eval("MyDateTime")) %>' />
代码隐藏中的:
protected string FormatMyDateTime(DateTime date)
{
// Do your if else for formatting here.
}
答案 2 :(得分:1)
您没有提到您使用的.net语言。使用VB.NET,您可以使用以下内联表达式:
... Text='<%# Eval("MyDateTime", If(Eval("MyDateTime").TimeOfDay = TimeSpan.Zero, "{0:d}", "{0:g}")) %>'
我没有使用C#进行测试,但我想在使用三元If(...)
运算符替换?:
并将Eval
的结果转换为DateTime
之后才能访问{{1}应该做的伎俩。
答案 3 :(得分:0)
我不确定你是否在寻找这个,但我觉得值得尝试。 希望它有效。
<%# String.Format(Eval("MyDateTime"),"{0:d}") %>
<%# String.Format(Eval("MyDateTime"),"{0:g}") %>
答案 4 :(得分:0)
您可以在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));
%>
答案 5 :(得分:0)
仅显示日期部分
<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()%>' />