J'essaie de convertir ma valeur formatée de chaîne en type de date avec format dd/MM/yyyy
.
this.Text="22/11/2009";
DateTime date = DateTime.Parse(this.Text);
Quel est le problème ? Il a un deuxième remplacement qui demande IFormatProvider
. Qu'est-ce que c'est? Dois- je également le transmettre? Si oui, comment l'utiliser pour ce cas?
Éditer
Quelles sont les différences entre Parse
et ParseExact
?
Modifier 2
Les deux réponses de Slaks et de Sam fonctionnent pour moi, actuellement l'utilisateur donne l'entrée mais cela sera assuré par moi qu'elles sont valides en utilisant maskTextbox.
Quelle réponse est la meilleure compte tenu de tous les aspects tels que la sécurité du type, les performances ou quelque chose qui vous plaît
Réponses:
Utilisez
DateTime.ParseExact
.la source
dd/MM/yyyy
donc une chaîne de texte avec une heure ne sera pas analysée correctement. Vous devrez soit supprimer l'heure, soit l'inclure dans le modèle de format. Il y a une surchargeParseExact
qui accepte un tableau de modèles de format et analysera le texte s'il correspond à l'un d'entre eux.CultureInfo.InvariantCulture
place du format actuel si vous définissez quand même un format?Thread.CurrentThread.CurrentCulture = new CultureInfo("da-DK");
, cela cassera votre solution. Pour résoudre ce problème, utilisez"dd'/'MM'/'yyyy"
(en protégeant les barres obliques par des guillemets simples), ou@"dd\/MM\/yyyy"
("échapper" les barres obliques inversées).Vous devez appeler
ParseExact
, qui analyse une date qui correspond exactement à un format que vous fournissez.Par exemple:
Le
IFormatProvider
paramètre spécifie la culture à utiliser pour analyser la date.À moins que votre chaîne ne vienne de l'utilisateur, vous devriez réussir
CultureInfo.InvariantCulture
.Si la chaîne provient de l'utilisateur, vous devez la transmettre
CultureInfo.CurrentCulture
, qui utilisera les paramètres spécifiés par l'utilisateur dans Options régionales du Panneau de configuration.la source
using System.Globalization;
L'analyse d'une représentation sous forme de chaîne d'un DateTime est une chose délicate car différentes cultures ont des formats de date différents. .Net connaît ces formats de date et les extrait de votre culture actuelle (
System.Threading.Thread.CurrentThread.CurrentCulture.DateTimeFormat
) lorsque vous appelezDateTime.Parse(this.Text)
;Par exemple, la chaîne "22/11/2009" ne correspond pas au ShortDatePattern pour les États-Unis (en-US) mais correspond à la France (fr-FR).
Désormais, vous pouvez soit appeler
DateTime.ParseExact
et transmettre la chaîne de format exacte que vous attendez, soit transmettre une culture appropriéeDateTime.Parse
pour analyser la date.Par exemple, cela analysera votre date correctement:
Bien sûr, vous ne devriez pas choisir la France au hasard, mais quelque chose qui correspond à vos besoins.
Ce que vous devez savoir, c'est ce qui
System.Threading.Thread.CurrentThread.CurrentCulture
est défini et si / pourquoi il diffère de ce que vous attendez.la source
Bien que les solutions ci-dessus soient efficaces, vous pouvez également modifier le fichier webconfig avec ce qui suit ...
Réf: format Datetime différent sur la machine locale par rapport à la machine de production
la source
Vous devrez peut-être spécifier la culture pour ce format de date spécifique comme dans:
Pour plus de détails, allez ici:
http://msdn.microsoft.com/en-us/library/5hh873ya.aspx
la source
Après avoir passé beaucoup de temps, j'ai résolu le problème
la source
utilisez ceci pour convertir une chaîne en datetime:
la source
Sur la base de cette référence , la prochaine approche a fonctionné pour moi:
la source
la source
Tout comme quelqu'un l'a dit ci-dessus, vous pouvez l'envoyer en tant que paramètre de chaîne, mais il doit avoir ce format: '20130121' par exemple et vous pouvez le convertir dans ce format en le prenant directement à partir du contrôle. Ainsi, vous l'obtiendrez par exemple à partir d'une zone de texte comme:
pour le convertir en: '20130121' vous utilisez:
afin que SQL puisse le convertir et le mettre dans votre base de données.
la source
Vous pouvez également utiliser
la source
A travaillé pour moi sous le code:
Espace de noms
la source
Changer manuellement:
À partir du 22/11/2015, il sera converti le 22/11/2015
la source