在DataList中将时间数据类型显示为AM / PM时间

时间:2015-06-18 13:00:09

标签: c# datetime data-binding datalist timespan

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

在此语句中,“time”是我的数据库中的时间数据类型。它显示为16:00:00。我想把它显示为下午4点。我认为如果我使用datetime数据类型,这是非常简单的,但是如何将其转换为datetime(使用{HH.mm tt}格式化)或以AM / PM时间显示。

3 个答案:

答案 0 :(得分:1)

由于T-SQL time在CLR端与TimeSpan映射,当您从数据库中获取此值时,它将是TimeSpan,而不是DateTime

并且您无法代表TimeSpan代表AMPM代理人。这些仅适用于DateTime表示。没有TimeSpan之类的东西; 下午4小时的时间间隔。这没有意义,对吧?

最近的事情可能,从数据库中获取此值并将其添加到DateTime.Today值超过Add(TimeSpan) method的值。然后,您可以使用.ToString("h:mm tt")方法获取字符串表示形式,其文化不会将AMDesignatorPMDesignator作为空字符串。

一步一步;

  1. 从您的数据库中获取time TimeSpan
  2. 使用DateTime dt = DateTime.Today.Add(time)方法获取日期时间。
  3. 使用dt.ToString("h:mm tt", CultureInfo.InvariantCulture)
  4. 显示字符串表示形式

答案 1 :(得分:0)

我用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#表达式的正确轨道上。非常感谢您的投入。

答案 2 :(得分:0)

<%#DateTime.Today.Add((TimeSpan)(Eval("Event_From_Time"))).ToString("H:mm tt")%>