2013-05-27 10 views
8

Sto utilizzando un metodo per convalidare caselle di testo.Verifica diversi formati di data con DateTime.TryParse()

public bool ValidateDateTimeTextBoxes(params TextBox[] textBoxes) 
    { 
     DateTime value = DateTime.Today; 
     //string dateFormat = "dd/mm/yyyy"; 

     foreach (var textBox in textBoxes) 
     { 
      if (!DateTime.TryParse(textBox.Text, out value)) 
      { 
       return false; 
      } 
     } 

     return true; 
    } 

Voglio controllare anche il formato. Richiede mm/dd/yyyy, ma vogliamo che sia dd/mm/yyyy

+3

guardare in alto TryParseExact –

+1

titolo, titolo, non riuscivo a capire "ma" – David

risposta

17

Prova DateTime.TryParseExact

DateTime dt; 

DateTime.TryParseExact(textBox.Text, 
         "dd/MM/yyyy", 
         CultureInfo.InvariantCulture, 
         DateTimeStyles.None, 
         out dt); 

Se si desidera controllare più formati come aggiornati nella tua domanda allora si può fare utilizzando un altro metodo di sovraccarico TryParseExact che prende format parametro come matrice di stringa.

string[] formats = { "dd/MM/yyyy", "MM/dd/yyyy" }; 
DateTime.TryParseExact(txtBox.Text, 
         formats, 
         CultureInfo.InvariantCulture, 
         DateTimeStyles.None, 
         out value)); 

Prestare attenzione alla stringa di formato. Come hai menzionato il formato dd/mm/yyyy. Qui mm rappresenta il minute non il mese. Utilizzare MM per la rappresentazione del mese.

2
DateTime.TryParseExact(textBox.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out outDt)) 
1
public bool ValidateDateTimeTextBoxes(params TextBox[] textBoxes) 
    { 
     DateTime value = DateTime.Now; 
     //string dateFormat = "dd/mm/yyyy"; 

     foreach (var textBox in textBoxes) 
     { 
      if (!DateTime.TryParse(textBox.Text,"dd/mm/yyyy",new CultureInfo("en-US"), 
          DateTimeStyles.None out value)) 
      { 
       return false; 
      } 
     } 

     return true; 
    } 
1

Provare a utilizzare TryParseExact

Converte la rappresentazione di stringa specificata di una data e l'ora per la sua DateTime equivalente. Il formato della rappresentazione della stringa deve corrispondere esattamente a un formato specificato. Il metodo restituisce un valore che indica se la conversione è riuscita.

1

Utilizzare invece TryParseExact che è anche più veloce. Esempio:

using System; 
using System.Globalization; 

class Program 
{ 
    static void Main() 
    { 
     string dateString = "27/05/2012"; // <-- Valid 
     string dtformat = "dd/mm/yyyy"; 
     DateTime dateTime; 
     if (DateTime.TryParseExact(dateString, dtformat, CultureInfo.InvariantCulture, 
      DateTimeStyles.None, out dateTime)) 
     { 
      Console.WriteLine(dateTime); 
     } 
    } 
} 
+0

Avete qualsiasi riferimento quando si dice che 'TryParseExact' è più veloce? – Otiel

+0

Ho trovato questo post del blog (http://blog.joachim.at/?p=42), qui da una domanda precedente. – KZIA

Problemi correlati