无法强制转换类型为'System.TimeSpan'键入'System.IConvertible

本文关键字:System TimeSpan IConvertible 键入 转换 类型 | 更新日期: 2023-09-27 18:13:35

我在我的SQL数据库列aeStart作为time(0)(节省时间在24小时格式),例如:10:48:00, 15:28:00, 16:32:00

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

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

我得到一个错误:

无法强制转换"System"类型的对象。时间跨度'到类型"System.IConvertible"。

如果我尝试:

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

我得到:

输入字符串格式不正确。

如果我只是做:

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

我会得到像

这样的东西

10:48:00或15:25:00

这不是我想要的。

我想要10:48 am或3:25 pm

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

答:

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

无法强制转换类型为'System.TimeSpan'键入'System.IConvertible

问题是:您的时间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() %>"/>

尝试使用TimeSpan.ToSting(String)

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

AM/PM的概念在一般意义上对时间跨度没有意义。该时间范围是发生在上午还是下午,还是在它们之间分割,这是特定于应用程序上下文的元数据。您可以添加一个额外的字符串。使用三元逻辑格式化或类似,以确定时间范围属于一天中的哪个部分。

TimeSpan外,Convert.ToDateTime没有过载。点击这里阅读。

解决这个问题的方法是做一些完全不同的事情,因为方法没有重载来做这件事。下面是另一种获取时间的方法:

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

假设aeStartTimeSpan,那么带有"tt"的格式字符串是错误的。'tt', AM/PM指示符,对DateTime NOT a TimeSpan有效。