Convertit une chaîne en mm/jj/aaaa
J'ai les chaînes de caractères suivantes dans différents formats:
16/05/2014 21-Jun-2014 2014-05-16 16-05-2014 5/19/2014 14 Mai 2014
J'ai besoin de convertir toutes les chaînes ci-dessus en mm/jj/aaaa format en c#.
J'ai essayé d'utilisé DateTime.ParseExact
comme DateTime dt = DateTime.ParseExact("16-05-2014", "mm/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture)
en C# mais je suis l'exception, comme "la Chaîne n'a pas été reconnu comme un DateTime valide".
J'ai aussi essayé d'utiliser à Convert.ToDateTime()
mais il n'est pas de travail.
Est il une méthode ou d'une fonction que l'on peut écrire/disponible en C# qui permettrait de convertir le au-dessus de la chaîne de formats dans un seul format de date je.e en "mm/dd/yyyy" format ??
Toute aide serait grandement appréciée.
- Voir la documentation pour savoir ce que
mm
moyens. (indice: les Minutes et les Mois ne sont pas les mêmes) - Votre chaîne de format ne semble pas correspondre à l'entrée.
/
et-
sont des caractères différents, et l'entrée n'ont pas de spécification de temps. Vous souhaitez sans doute la chaîne de format à fait correspondre au format de la date... - Sur votre exemple
DateTime dt = DateTime.ParseExact("16-05-2014", "mm/dd/yyyy hh:mm:ss tt", CultureInfo.InvariantCulture)
, le format de la date est en fait, "dd/mm/yyyy". Essayez quelque chose de simple comme DateTime.ParseExact("16-05-2014", "dd/mm/yyyy") et voir si cela fonctionne. À partir de là, ce que vous pouvez faire si vous avez de différents formats, c'est d'essayer de les convertir avec un format, et si vous obtenez une exception, de les convertir à l'aide de l'autre. - Vous utilisez
ParseExact
dans le mauvais sens. Vous devriez dire à la fonction de ce format de la chaîne d'entrée est dans, pas ce format de la sortie. - Merci pour votre commentaire.Est-il possible de convertir la chaîne en tant que "16-05-2014" en "05/16/2014" l'aide au format DateTime.ParseExact méthode ou toute autre méthode disponible en C# ou dois-je écrire une fonction explicitement ?
- Arrêter d'écrire du code Java. Il pourrit votre esprit. Pas chaque objet est une chaîne de caractères.
Vous devez vous connecter pour publier un commentaire.
Il échoue sur le premier terme de votre chaîne de format, ce qui est révélateur de la fonction pour traiter le "16" dans les minutes et les regarder pendant des heures, des minutes et des secondes qui n'existent pas dans l'entrée.
Vous avez le choix entre plusieurs formats de date, et donc le besoin de la ParseExact() surcharge qui accepte différentes chaînes de format:
Rappelez-vous aussi que la baisse des cas "m"s sont pour les minutes. Si vous voulez des mois, vous avez besoin d'une majuscule "M". Documentation complète sur les chaînes de format est ici:
Enfin, je soupçonne que vous obtenez avant de vous sur le formatage de la sortie de chaîne. Garder ces valeurs DateTime objets aussi longtemps que possible, et seulement le format d'une chaîne de caractères au dernier moment avant de les présenter à l'utilisateur. Si vraiment vous voulez une chaîne de caractères, à moins de coller le Norme ISO 8601 format.
Votre principal problème est que votre chaîne de format est incorrect. Un petit
m
est pour les minutes, un grandM
est pour le mois.Essayez de passer tous vos formats dans un tableau. Par exemple, comme ceci
Avec cela, vous pouvez analyser tous vos formats à la fois.
Pour plus d'informations sur les paramètres de format, voir l'officiel docs.
Peu de choses:
Votre entrée date de
16/05/2014
ne correspond pas à votre formatMonth/Day/Year
- comment peut-il y avoir un 16e mois?Deuxièmement, vous l'utilisez
mm
qui représenteMinutes
, pasMonths
. Vous devez utiliserMM
.Enfin, votre exemple de chaîne
16-05-2014
ne correspond pas au format fourni, vous avez utilisé des traits d'union-
au lieu de barres obliques/
De fournir une collection de différents formats correspondant à votre entrée:
Vous trouverez peut-être la méthode suivante utiles à accepter ce que le format de date que vous voulez et les convertir en DateTime:
Passer dans la chaîne que vous souhaitez être converti en type DateTime ainsi que la date actuelle au format de temps et ce serait de retour que vous nullable DateTime. Si vous êtes certain que quelle que soit la chaîne que vous êtes en passant n'est pas null, alors vous pouvez le retirer du bit. La raison d'être, c'est que vous ne pouvez pas convertir un null DateTime. Dans mon cas, je ne pouvais pas être certain si elle serait ou non donc j'ai besoin de la capacité de capturer les valeurs null en tant que bien.
Vous pouvez l'utiliser comme ceci:
Si vous vouliez vous pourriez modifier la méthode d'accepter un tableau de chaînes et simplement itérer sur chaque et de les renvoyer dans une seule liste s'ils ont le même format.
Comme d'autres l'ont souligné, les mois sont MM pas mm (minutes).
Sur un
DateTime
objet que vous pouvez appeler.ToString("MM/dd/yyyy")
. Compte tenu des chaînes que vous avez, vous pouvez d'abord créer de nouveauxDateTime
objets pour chaque chaîne, puis en appel.ToString("MM/dd/yyyy")
. Par exemple: