2009-06-25 7 views
0

J'ai une situation dans laquelle j'ai besoin de convertir une donnée de texte en date.Conversion de données de texte en date

J'ai utilisé le code suivant pour le faire!


 string s = textBox1.Text; 
     if (String.IsNullOrEmpty(s)) 
     { 
      textBox2.Text = "Please enter any date."; 

     } 
     else 
     { 
      DateTime dt = DateTime.Parse(s); 
      string day = dt.Day.ToString(); 
      string month = dt.Month.ToString(); 
      string year = dt.Year.ToString(); 
      s = day + "/" + month + "/" + year; 
      textBox2.Text = s; 
     } 

Cela changera seulement les formats suivants de données.


10/10/09 ou 10/10/2009 ---- ------ date convertie 10/10/2009

12/13/2009 ou 12/13/9 ---- date de modification ------- 12/13/2009

10/16 ---- date de modification ------------------- ---- 16/10/2009

2009/12/10 ---- date de conversion ------------------ 10/12/2009


Les formats suivants ne sont pas se changer à jj/mm/aaaa


16/10-jj/mm

060209 ou 06022009 jjmmaaaa

13122009 mmjjaaaa

20091213 yyyymmdd

20091312 yyyyddmm

20.07.2009/20.07.2009/20-07-2009/20-07-09


Quelqu'un peut-il me aider avec cela. Je suis très nouveau à C#

+0

vous ne pouvez pas déterminer la différence entre yyyymmdd et yyyyddmm, ou ddmmyyyy et mmddyyyy par exemple 20010102 est ambigu, de même que 01022001. –

Répondre

0

Merci pour tout le soutien et les conseils que vous avez donnés. J'ai trouvé la solution à ma requête

Une nouvelle zone de texte est créée explicitement et en utilisant la fonction ParseExact la valeur de DateTime est faite pour convertir.

Voici la forme qui a été utilisée. alt text http://img146.imageshack.us/img146/2107/form.jpg

Le code est écrit ci-dessous


private void button1_Click(object sender, EventArgs e) 

     { 
     string s = textBox1.Text;   
     string DFF = textBox3.Text;   

     //To check whether field is empty 

     if (String.IsNullOrEmpty(s)) 
     { 
      MessageBox.Show("Please enter correct date"); 
      textBox2.Text = "Enter correct date"; 
     }   
     else 
     { 
      DateTime dt = DateTime.ParseExact(s, DFF, null); 
      textBox2.Text = dt.ToShortDateString(); 
     } 

    } 

Ce code donne une sortie pour tous les types de date:

jj.mm.aaaa ou dd-mm-aaaa ou jj \ mm \ aaaa

mm.jj.aaaa ou mm-jj-aaaa ou mm \ jj \ aaaa

aaaa.mm.jj ou aaaa-mm-jj ou aaaa \ mm \ jj

yyyy.dd.mm ou aaaa-mm-jj ou aaaa-mm-jj

jjmmaa ou mmjjaa ou yyddmm

dd \ mm ou mm \ dd ou dd.mm ou MM.JJ

1

Les dates d'analyse sont un peu plus compliquées que cela, j'en ai peur. Cela dépendra de votre culture/pays. Regardez les DateTime.Parse ... pour les surcharges

Notez également que lorsque vous la sortie de votre date, vous pouvez/devez également utiliser String.Format, comme ceci:

String.Format("{0:dd/MM/yyyy}", dt) 
0

Tout d'abord, il serait probablement plus élégant si vous devaient utiliser la méthode DateTime.ToString avec une chaîne de format spécifiant le formulaire dans lequel vous souhaitez que la chaîne de date apparaisse (informations sur ce peut être trouvé here). Pour savoir pourquoi les autres formats que vous avez spécifiés ne sont pas correctement analysés dans un objet DateTime, vous devez probablement utiliser la variante DateTime.Parse(string, IFormatProvider) et définir votre propre IFormatProvider pour cela. Vous pourriez trouver cela MSDN article pourrait être utile pour cela.

0

Vous devrez écrire votre propre analyse pour tous les formats non standard. Des formats tels que "yyyymmdd" et "yyyyddmm" seront également problématiques, car vous aurez besoin de l'utilisateur pour spécifier quel est le format d'entrée ou vous aurez juste mal dans certains cas.

Pour le reste jeter un oeil à DateTime.Parse (également mentionné par Benjol) il devrait résoudre votre problème pour les formats communs utilisés dans le monde entier.

0

Vous pouvez utiliser DateTime.ParseExact

Par exemple:

DateTime.ParseExact("20090823", "yyyyMMdd", null);  
DateTime.ParseExact("16/10", "dd/MM", null); 

Edit: Utilisez DateTime.TryParse (ou DateTime.TryParseExact) pour valider la date entrée.

DateTime date; 
string error = ""; 
if (!DateTime.TryParse("12978434", out date)) 
{ 
    error = "Invalid date"; 
} 
+0

Cela ne fonctionne pas. Je pense que vous devez spécifier un IFormatProvider approprié ou ICultureInfo. – jpoh

+0

J'ai eu ce travail avec null sur ma machine. Je pense que je ferai plus d'investigations sur celui-ci. – Castrohenge

0

DateTime.Parse ne peut pas analyser toutes les combinaisons que vous spécifiez. Je suggère que vous essayez d'abord DateTime.TryParse pour voir si la date d'entrée est analysable. Si cela renvoie false, utilisez ParseExact (ou, mieux encore, TryParseExact) pour vérifier chaque format de date attendu.

Malheureusement, je ne pense pas qu'il existe une solution unique à ce problème.

0

Est-il possible que vous utilisiez un contrôle 'DatePicker'/Calendar au lieu d'un TextBox?

par exemple AJAX Toolkit Calendar control

Cela éliminerait la nécessité pour vous d'avoir à gérer tous les formats possibles de ce jour un utilisateur pourrait spécifier. Il fournit également une meilleure expérience utilisateur à mon humble avis.

Mise à jour après commentaire OP:

Comme d'autres l'ont suggéré, j'utiliser DateTime.TryParse comme une première passe, pour gérer les chaînes de date dans l'un des formats standard pris en charge. Ensuite, vous devrez replier sur DateTime.ParseExact pour chaque format non standard pris en charge. Enfin, je suppose que vous devez marquer une erreur pour toutes les chaînes non-date ou les formats de date non-triés.

+0

Je suis d'accord, mais puis-je vouloir ce code dans le cadre de la validation pour choisir les données de texte à partir du fichier texte et vérifier. –

+0

Ok je vois, je pensais que je verrais pour voir si vous pouviez partir avec une approche plus facile :-) –