无法将类型 'System.TimeSpan' 的对象转换为类型 '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>
我得到一个错误:
Unable to cast object of type 'System.TimeSpan' to type
'System.IConvertible'.
如果我尝试:
Text='<%# Eval("aeStart", "{0:HH:mm tt}") %>'
我得到:
Input string was not in a correct format.
如果我这样做:
Text='<%# Eval("aeStart") %>'
我会得到类似的东西
10:48:00 or 15:25:00
这不是我想要的。
I want 10:48 am or 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() %>' />
除 TimeSpan
外,Convert.ToDateTime
没有重载。仔细阅读 here。
解决此问题的方法是做一些完全不同的事情,因为该方法没有重载来执行此操作。以下是您如何以另一种方式获得时间:
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 和 TimeSpan
.
有效
timeSpan.ToString("hh\:mm\:ss")
AM/PM 的想法对于一般意义上的时间跨度没有真正意义。该时间跨度是发生在上午、下午还是在它们之间拆分是特定于您的应用程序上下文的元数据。您可以添加额外的 string.Format 或类似的三元逻辑来确定时间跨度属于一天中的哪一部分。
问题是:您的时间 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() %>"/>
我的 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>
我得到一个错误:
Unable to cast object of type 'System.TimeSpan' to type 'System.IConvertible'.
如果我尝试:
Text='<%# Eval("aeStart", "{0:HH:mm tt}") %>'
我得到:
Input string was not in a correct format.
如果我这样做:
Text='<%# Eval("aeStart") %>'
我会得到类似的东西
10:48:00 or 15:25:00
这不是我想要的。
I want 10:48 am or 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() %>' />
除 TimeSpan
外,Convert.ToDateTime
没有重载。仔细阅读 here。
解决此问题的方法是做一些完全不同的事情,因为该方法没有重载来执行此操作。以下是您如何以另一种方式获得时间:
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 和 TimeSpan
.
timeSpan.ToString("hh\:mm\:ss")
AM/PM 的想法对于一般意义上的时间跨度没有真正意义。该时间跨度是发生在上午、下午还是在它们之间拆分是特定于您的应用程序上下文的元数据。您可以添加额外的 string.Format 或类似的三元逻辑来确定时间跨度属于一天中的哪一部分。
问题是:您的时间 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() %>"/>