无法强制转换类型为'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() %>' />
问题是:您的时间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");
假设aeStart
是TimeSpan
,那么带有"tt"的格式字符串是错误的。'tt', AM/PM指示符,对DateTime
NOT a TimeSpan
有效。