Unable to cast object of type 'System.TimeSpan' to type 'System.IConvertible'
Ich habe in meiner SQL-Datenbank-Spalte aeStart
als time(0)
(die sparen Sie Zeit in der 24-Stunden-format), zum Beispiel: 10:48:00
, 15:28:00
, 16:32:00
Ich versuche, um anzeigen auf listView
Steuerung im format hh:mm tt
(am/pm-format)
<ItemTemplate>
<asp:Label ID="lblStart" runat="server"
Text='<%# Convert.ToDateTime(Eval("aeStart")).ToShortTimeString() %>' />
</ItemTemplate>
Bekomme ich eine Fehlermeldung:
Unable to cast object of type 'System.TimeSpan' zu geben
'System.IConvertible'.
Wenn ich versuchen:
Text='<%# Eval("aeStart", "{0:HH:mm tt}") %>'
Bekomme ich:
Eingabezeichenfolge hatte nicht korrekten format.
Wenn ich nur:
Text='<%# Eval("aeStart") %>'
Ich werde etwas wie
10:48:00 oder 15:25:00
welche nicht, was ich will.
Ich soll 10:48 Uhr oder 3:25 pm
Wie man dieses Problem beheben, ich will die Zeit angezeigt, dass das label in 12-Stunden-format mit am/pm (lieber den code auf der .aspx-Datei, nicht in der code-behind)
ANTWORT:
<asp:Label ID="lblStart" runat="server" Text='<%# DateTime.ParseExact(Eval("aeStart").ToString(), "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture).ToShortTimeString() %>' />
- Was Daten-Typ und format datetime gespeichert in der db?
time(0)
wie gesagt in der Frage.- Also warum nicht nutzen
DateTime
? Das ist nicht eine Zeitspanne, die Sie dort haben. - Was ist der Wert von
aeStart
damals?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Das problem ist: Ihre Zeit
10:48:00
entspricht nicht dem MusterHH:mm tt
. Sie sollten diese Muster statt:HH:mm:ss
.Getestet habe ich es mit diesem code:
So, in Ihrer situation, die Lösung sollte sein:
.aspx
ich nicht nutzen willst auf code-behind-da wird es mitFindcontrol
aufListview rowDatabound
und stopftConvert.ToDateTime(Eval("aeStart")).ToShortTimeString()
inDateTime.ParseExact("aeStart", "HH:mm:ss", CultureInfo.InvariantCulture).ToShortTimeString()
?String was not recognized as a valid DateTime.
lblStart
Label aber nichts10:48:00
oder15:25:00
finden Sie meine aktuelle FrageDateTime.ParseExact(Eval("aeStart"), "HH:mm:ss", CultureInfo.InvariantCulture).ToShortTimeString();
.aspx
- code als auch mit ein wenig änderungen, hier ist code, der funktioniert hat:DateTime.ParseExact(Eval("aeStart").ToString(), "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture).ToShortTimeString()
Eval()
Funktion in meinem ersten Kommentar, das führt zu eine dumme Ausnahme, LOL 😛 Trotzdem, es ist gut zu sehen, dass das problem gelöst 🙂Gibt es keine überlastung der
Convert.ToDateTime
dass außer einTimeSpan
. Lesen Sie über es hier.Die Möglichkeit dieses Problem zu beheben ist zu tun, ist etwas ganz anderes, denn die Methode hat keine überladung, dies zu tun. Hier ist, wie könnte man nur die Zeit in einer anderen Art und Weise:
How to fix
nicht, warum.Unter der Annahme, dass
aeStart
ist einTimeSpan
, dann der format-string wird mit "tt" ist falsch. 'tt', die AM/PM-Kennzeichner gültig ist, für eineDateTime
NICHT eineTimeSpan
.Versuchen Sie es mit TimeSpan.ToSting(String)
Die Idee, AM/PM nicht wirklich sinnvoll für eine Zeitspanne im Allgemeinen Sinn. Ob diese Zeitspanne stattfand, in der am, pm, oder war zwischen Ihnen aufgeteilt wird, Metadaten, die spezifisch für den Kontext der Anwendung. Man könnte hinzufügen, eine zusätzliche Zeichenfolge.Format oder ähnliches mit ternärer Logik, um zu bestimmen, welchen Teil des Tages die Zeitspanne bezieht.