【问题标题】:Display time datatype as AM/PM time in DataList在 DataList 中将时间数据类型显示为 AM/PM 时间
【发布时间】:2015-06-18 13:00:09
【问题描述】:
<asp:Label ID="timeLabel" runat="server" Text='<%# Eval("time") %>' />

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

【问题讨论】:

    标签: c# datetime data-binding datalist timespan


    【解决方案1】:

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

    您不能用AMPM 指示符来表示TimeSpan。这些仅适用于DateTime 表示。没有像TimeSpan 这样的东西; 下午 4 小时的时间间隔。这没有道理,对吧?

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

    一步一步;

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

    【讨论】:

    • 您能否将时间添加到不带时间组件的任意日期(例如DateTime.Today),然后仅使用时间组件(例如hh:mm tt)对其进行格式化?
    • @Cᴏʀʏ 在您撰写评论时更新相同的想法。这是最接近IMO的东西。另外我认为h 会更好,因为看起来 OP 没有单个数字的前导零。
    【解决方案2】:

    我在这里用 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# 表达式的正确轨道上。非常感谢您的意见。

    【讨论】:

      【解决方案3】:
      <%#DateTime.Today.Add((TimeSpan)(Eval("Event_From_Time"))).ToString("H:mm tt")%>  
      

      【讨论】:

      • 您能否为您的答案添加一些解释?仅代码的答案在 SO 上不受欢迎。
      猜你喜欢
      • 1970-01-01
      • 2011-01-06
      • 2012-01-03
      • 2018-01-21
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      相关资源
      最近更新 更多