在数据列表中将时间数据类型显示为上午/下午时间


<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

而且,您不能用AMPM指示符表示TimeSpan。这些仅适用于DateTime表示。没有像TimeSpan这样的事情;4小时时间间隔下午。这说不通吧?

最接近的事情可能是,从数据库中获取此值,并使用Add(TimeSpan)方法重载将其添加到DateTime.Today值中。然后,您可以使用.ToString("h:mm tt")方法获取它的字符串表示形式,该方法具有没有AMDesignatorPMDesignator为空字符串的区域性。

一步一步;

  1. 从数据库中获取time作为TimeSpan
  2. 使用DateTime dt = DateTime.Today.Add(time)方法获取日期时间。
  3. 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")%>  

相关内容

  • 没有找到相关文章

最新更新