[英]System.InvalidCastException: 'Unable to cast object of type 'System.TimeSpan' to type 'System.IConvertible'
[英]Unable to cast object of type 'System.TimeSpan' to type 'System.IConvertible'
我在我的 SQL 數據庫列aeStart
有time(0)
(以 24 小時格式保存時間),例如: 10:48:00
, 15:28:00
, 16:32:00
我正在嘗試以hh:mm tt
(am/pm 格式) 格式在listView
控件上顯示它
<ItemTemplate>
<asp:Label ID="lblStart" runat="server"
Text='<%# Convert.ToDateTime(Eval("aeStart")).ToShortTimeString() %>' />
</ItemTemplate>
我收到一個錯誤:
無法將“System.TimeSpan”類型的對象轉換為“System.IConvertible”類型。
如果我嘗試:
Text='<%# Eval("aeStart", "{0:HH:mm tt}") %>'
我得到:
輸入字符串的格式不正確。
如果我只是這樣做:
Text='<%# Eval("aeStart") %>'
我會得到類似的東西
10:48:00 或 15:25:00
這不是我想要的。
我要上午 10:48 或下午 3:25
如何解決這個問題,我希望時間以 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
之外,沒有Convert.ToDateTime
重載。 在這里閱讀它。
解決這個問題的方法是做一些完全不同的事情,因為該方法沒有重載來做到這一點。 以下是您可以通過另一種方式獲得時間的方法:
TimeSpan timespan = new TimeSpan(your time span value);
DateTime time = DateTime.Today.Add(timespan);
string displayTime = time.ToString("hh:mm:ss");
timeSpan.ToString("hh\:mm\:ss")
AM/PM 的想法對於一般意義上的時間跨度並沒有真正意義。 該時間跨度是發生在上午、下午還是在它們之間分開是特定於應用程序上下文的元數據。 您可以添加一個額外的 string.Format 或類似的三元邏輯來確定時間跨度屬於一天的哪一部分。
假設aeStart
是一個TimeSpan
,那么帶有“tt”的格式字符串是錯誤的。 'tt',AM/PM 指示符,對DateTime
不是TimeSpan
有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.