<asp:Label ID="timeLabel" runat="server" Text='<%# Eval("time") %>' />
在此语句中,"time"是我的数据库中的时间数据类型。它显示为 16:00:00。我正在尝试将其显示为下午 4:00。如果我使用日期时间数据类型,我认为这非常简单,但是我如何将其转换为日期时间(以使用 {HH.mm tt} 格式)或以其他方式显示为 AM/PM 时间。
由于 T-SQL time
在 CLR 端与 TimeSpan
映射,因此当您从数据库中获取此值时,它将是TimeSpan
,而不是DateTime
。
而且,您不能用AM
或PM
指示符表示TimeSpan
。这些仅适用于DateTime
表示。没有像TimeSpan
这样的事情;4小时时间间隔下午。这说不通吧?
最接近的事情可能是,从数据库中获取此值,并使用Add(TimeSpan)
方法重载将其添加到DateTime.Today
值中。然后,您可以使用.ToString("h:mm tt")
方法获取它的字符串表示形式,该方法具有没有AMDesignator
和PMDesignator
为空字符串的区域性。
一步一步;
- 从数据库中获取
time
作为TimeSpan
。 - 使用
DateTime dt = DateTime.Today.Add(time)
方法获取日期时间。 - 用
dt.ToString("h:mm tt", CultureInfo.InvariantCulture)
显示它是字符串表示形式
我在这里用SQL而不是C#解决了这个问题。我确实尝试将TimeSpan添加到Eval()参数中的DateTime中,但是我一直得到FormatException。而且,表情变得有点荒谬。
我试过这个
<asp:Label ID="timeLabel" runat="server" Text='<%# DateTime.Today.Add(TimeSpan.Parse(Eval("time").ToString())).ToString("h:mm tt") %>' />
而这个
<asp:Label ID="timeLabel" runat="server" Text='<%# Eval(DateTime.Today.Add(TimeSpan.Parse("time")).ToString("h:mm tt")) %>' />
修改要使用的查询要容易得多
SELECT CONVERT(varchar, [time], 100 ) AS [time]
我对这个结果很满意。不过,我很想知道我是否在使用 C# 表达式时走在正确的轨道上。非常感谢您的输入。
<%#DateTime.Today.Add((TimeSpan)(Eval("Event_From_Time"))).ToString("H:mm tt")%>