Impossible de convertir l'objet de type 'System.Temps "pour le" type de Système.IConvertible'
J'ai dans ma base de données SQL de la colonne aeStart
comme time(0)
(permettant d'économiser du temps dans le format de 24 heures), par exemple: 10:48:00
, 15:28:00
, 16:32:00
J'essaie de l'afficher sur listView
de contrôle en format hh:mm tt
(format am/pm)
<ItemTemplate>
<asp:Label ID="lblStart" runat="server"
Text='<%# Convert.ToDateTime(Eval("aeStart")).ToShortTimeString() %>' />
</ItemTemplate>
J'obtiens une erreur:
Impossible de convertir l'objet de type 'System.Temps " pour le type de
'Système.IConvertible'.
Si j'essaie:
Text='<%# Eval("aeStart", "{0:HH:mm tt}") %>'
J'obtiens:
Chaîne d'entrée n'était pas dans un format correct.
Si je ne l':
Text='<%# Eval("aeStart") %>'
Je vais obtenir quelque chose comme
10:48:00 ou 15:25:00
qui pas ce que je veux.
Je veux 10:48 am ou 3:25 pm
Comment résoudre ce problème, je veux que le temps est affiché sur l'étiquette au format de 12 heures avec am/pm (préférez tout le code sur le .fichier aspx, pas dans le code behind)
RÉPONSE:
<asp:Label ID="lblStart" runat="server" Text='<%# DateTime.ParseExact(Eval("aeStart").ToString(), "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture).ToShortTimeString() %>' />
- Ce type de données et le format est la date stockée dans la base de données?
time(0)
comme dit dans la question.- Alors pourquoi ne pas utiliser
DateTime
? Ce n'est pas une plage de temps (que vous avez là. - Quelle est la valeur de
aeStart
à l'époque?
Vous devez vous connecter pour publier un commentaire.
Le problème est: votre temps
10:48:00
ne correspondent pas au modèleHH:mm tt
. Vous devez utiliser ce modèle à la place:HH:mm:ss
.Je l'ai testé avec ce code:
Donc, dans votre situation, la solution doit être:
.aspx
, je ne veux pas utiliser ce code derrière, puisqu'il sera impliquantFindcontrol
surListview rowDatabound
et les aliments pourConvert.ToDateTime(Eval("aeStart")).ToShortTimeString()
enDateTime.ParseExact("aeStart", "HH:mm:ss", CultureInfo.InvariantCulture).ToShortTimeString()
?String was not recognized as a valid DateTime.
lblStart
Étiquette, mais rien10:48:00
ou15:25:00
, voir ma mise à jour de questionDateTime.ParseExact(Eval("aeStart"), "HH:mm:ss", CultureInfo.InvariantCulture).ToShortTimeString();
.aspx
code ainsi avec un peu de modifications, voici le code qui a travaillé:DateTime.ParseExact(Eval("aeStart").ToString(), "HH:mm:ss", System.Globalization.CultureInfo.InvariantCulture).ToShortTimeString()
Eval()
fonction dans mon premier commentaire, ce qui conduit à une stupide exception, LOL 😛 de toute façon, il est bon de voir le problème résolu 🙂Il n'y a pas de surcharge de
Convert.ToDateTime
que si l'on excepte unTimeSpan
. Lire à ce sujet ici.Le moyen de résoudre ce problème est de faire quelque chose de totalement différent, parce que la méthode n'a pas de surcharge pour ce faire. Voici comment vous pourriez obtenir juste le temps d'une autre manière:
How to fix
, pourquoi pas.En supposant que
aeStart
est unTimeSpan
, puis la chaîne de format "tt" est incorrecte. 'tt', l'indicateur AM/PM, est valable pour uneDateTime
PAS unTimeSpan
.Essayez d'utiliser TimeSpan.ToSting(String)
L'idée de AM/PM n'a pas vraiment de sens pour un temps dans le sens général. Si ce laps de temps a eu lieu dans l'am, pm, ou a été partagé entre eux, sont des métadonnées spécifiques au contexte de votre application. Vous pouvez ajouter une corde de plus.Format ou similaire avec ternaires de la logique pour déterminer quelle partie de la journée, le temps concerne les.