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

Ron*_*ing 2 c# sql-server asp.net datetime webforms

我在我的SQL数据库列aeStarttime(0)(其节省时间以24小时格式),例如:10:48:0015:28:0016:32:00

我正在尝试以listView格式hh:mm tt(am / pm格式)在控件上显示它

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

我收到一个错误:

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

如果我尝试:

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

我得到:

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

如果我只是这样做:

Text='<%# Eval("aeStart") %>'
Run Code Online (Sandbox Code Playgroud)

我会得到类似

10:48:00或15:25:00

这不是我想要的。

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

如何解决此问题,我希望时间以上午/下午的12小时格式显示在该标签上(最好使用.aspx文件中的所有代码,而不是后面的代码)

回答:

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

Tri*_*oan 5

问题是:您的时间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());
Run Code Online (Sandbox Code Playgroud)

因此,根据您的情况,解决方案应为:

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