簡體   English   中英

無法將“System.TimeSpan”類型的對象轉換為“System.IConvertible”類型

[英]Unable to cast object of type 'System.TimeSpan' to type 'System.IConvertible'

我在我的 SQL 數據庫列aeStarttime(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.ToSting(String)

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM