2009-02-19 7 views
0

J'ai un problème avec le type de données DateTime. Grâce à une zone de texte, je veux ajouter la personne dateofbirth. Comme il n'y a pas de type de données de date en C#, je suis obligé d'utiliser le type de données DateTime, mais lors de la conversion de TxtDateofBirth en DateTime, j'obtiens une erreur, "La chaîne n'a pas été reconnue comme DateTime valide." Voici ma conversion le code. J'ai gardé ce code en cas d'événement supplémentaire.Problème avec le type de données DateTime

DateTime dateofbirth = Convert.ToDateTime(TxtDateOfBirth.Text); 

Que dois-je faire?

Merci,

Masum

Répondre

3

Utilisez DateTime.ParseExact avec une chaîne de format qui spécifie que la partie date.

Sinon, comme cela est entrée utilisateur, utilisez DateTime.TryParseExact de sorte que vous n'avez pas besoin d'attraper une exception si l'utilisateur a entré une mauvaise date:

using System; 

class Test 
{ 
    static void Main() 
    { 
     TestParsing("24/10/2009"); 
     TestParsing("flibble"); 
    } 

    static void TestParsing(string text) 
    { 
     DateTime dt; 

     if (DateTime.TryParseExact(text, "d", null, 0, out dt)) 
     { 
      Console.WriteLine("Parsed to {0}", dt); 
     } 
     else 
     { 
      Console.WriteLine("Bad date"); 
     } 
    } 
} 

Notez que la chaîne de format « d » signifie " format de date courte "(voir les pages "standard date and time form at strings" et "custom date and time format strings" dans MSDN). "null" signifie "utiliser la culture actuelle" - donc ce qui précède fonctionne pour moi au Royaume-Uni, mais vous auriez besoin de faire la chaîne "10/24/2009" aux États-Unis. Vous pouvez spécifier une culture particulière si vous ne souhaitez pas utiliser la valeur par défaut actuelle du thread. 0 signifie le style de date et d'heure par défaut. Regardez la page MSDN pour plus d'informations.

1

Alternativement, use a mask de sorte que les utilisateurs peuvent seulement entrer des dates valides. (Voir la section C# sous des exemples sur le lien donné)

1

Il n'y a presque rien, on pourrait ajouter aux réponses de Jon, mais dans ce cas, je voudrais faire un point:

Essayez de comprendre que votre problème n'est pas à cause du type de données DateTime, mais parce que votre chaîne de date ne correspond pas au format attendu (basé sur les paramètres régionaux/culture de threads) que le constructeur DateTime.

Vous dites que vous êtes "forcé" d'utiliser le type de données DateTime. Vous devez garder à l'esprit que les dates doivent toujours être traitées comme des dates. J'ai vu trop de développeurs tomber dans le piège de l'utilisation de dates comme des chaînes (et effectuer des opérations de split/recherche) plutôt que d'utiliser DateTime, car ils estiment que ce dernier est trop compliqué.

Questions connexes