无法将“System.TimeSpan”类型的对象强制转换为“System.IConvertible”类型

时间:2015-09-21 03:16:23

标签: c# asp.net sql-server datetime webforms

我的SQL数据库列aeStart中有time(0)(以24小时格式节省时间),例如:10:48:0015:28:00,{{1} }

我正在尝试以格式16:32:00(上午/下午格式)在listView控件上显示它

hh:mm tt

我收到错误:

  

无法将类型为“System.TimeSpan”的对象强制转换为类型   'System.IConvertible'。

如果我尝试:

    <ItemTemplate>
        <asp:Label ID="lblStart" runat="server" 
          Text='<%# Convert.ToDateTime(Eval("aeStart")).ToShortTimeString() %>' />
    </ItemTemplate>

我明白了:

  

输入字符串的格式不正确。

如果我这样做:

Text='<%# Eval("aeStart", "{0:HH:mm tt}") %>'

我会得到像

这样的东西
  

10:48:00或15:25:00

这不是我想要的。

  

我想要上午10:48或下午3:25

如何解决这个问题,我希望时间以12小时格式显示在am / pm上(更喜欢.aspx文件中的所有代码,而不是后面的代码)

解答:

Text='<%# Eval("aeStart") %>'

4 个答案:

答案 0 :(得分:3)

问题是:您的时间10:48:00与模式HH:mm tt不匹配。您应该使用此模式:HH:mm:ss

我用这段代码测试了它:

    string time = "10:48:00";
    DateTime dateTime = DateTime.ParseExact(time, "HH:mm:ss", CultureInfo.InvariantCulture);
    Console.WriteLine(dateTime.ToShortTimeString());

因此,在您的情况下,解决方案应该是:

<asp:Label ID="lblStart" runat="server" Text="<%# DateTime.ParseExact(Eval("aeStart").ToString(), "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture).ToShortTimeString() %>"/>

答案 1 :(得分:1)

除了Convert.ToDateTime之外,TimeSpan没有超载。阅读它here

解决这个问题的方法是做一些完全不同的事情,因为这个方法没有重载。以下是您如何以其他方式获得时间:

TimeSpan timespan = new TimeSpan(your time span value);
DateTime time = DateTime.Today.Add(timespan);
string displayTime = time.ToString("hh:mm:ss");

答案 2 :(得分:0)

假设aeStartTimeSpan,那么格式字符串为&#34; tt&#34;是错的。 “AM / PM指示符”对DateTime a TimeSpan有效。

答案 3 :(得分:0)

尝试使用TimeSpan.ToSting(String)

timeSpan.ToString("hh\:mm\:ss")

AM / PM的概念在一般意义上的时间跨度上确实没有意义。是否在上午,下午或在它们之间进行分割的时间跨度是特定于应用程序上下文的元数据。您可以添加一个额外的string.Format或类似的三元逻辑来确定时间跨度所属的那一天的哪一部分。