2013-02-12 1 views
4

Quelle fonction .NET va convertir en DateTime mais avoir une valeur par défaut si l'entrée est vide?Comment convertir en DateTime mais avoir une valeur par défaut si l'entrée est vide?

par ex.

DateTime dtTest = Convert.ToDateTime(getDateString()); 

Si getDateString() retourne une chaîne vide Convert.ToDateTime lance une exception.

Comment puis-je avoir une valeur par défaut de "9:00AM" à la place de la chaîne vide? Est-ce quelque chose où TryParse pourrait être utilisé?

+0

9h quel jour? –

+0

Eh bien en effet, vous pouvez utiliser TryParse, mais je ne suis pas sûr si '09:00 'est vraiment un' DateTime' ou vous vouliez dire Date actuelle avec ce temps. – V4Vendetta

Répondre

3

Utilisez DateTime.TryParse et si l'analyse échoue, vous pouvez affecter DateTime.MinValue.AddHours(9) pour obtenir (9:00AM) heure avec la date minimale.

string str = ""; 
DateTime temp; 
DateTime dt = DateTime.TryParse(str, out temp) ? temp : DateTime.MinValue.AddHours(9); 

Pour le code ci-dessus votre objet dt tiendra {01/01/0001 9:00:00 AM}

4

Je l'ai utilisé ce qu'on appelle une déclaration ternaire. Vous pouvez voir un exemple ici: MSDN

string myDate = getDateString(); 
    DateTime dtTest = Convert.ToDateTime(String.IsNullOrEmpty(myDate) ? "my default value" : myDate); 

La déclaration ternaire est ci-dessous:

String.IsNullOrEmpty(myDate) ? "my default value" : myDate 

Et il peut se lire comme suit:

Si la chaîne est nulle ou vide, puis utilisez "ma valeur par défaut", sinon utilisez myDate.

2

Vous devez séparer cela en deux parties:

  • Déterminez ce que chaîne que vous voulez analyser
  • Déterminez ce que vous voulez que le résultat soit si cette chaîne ne peut pas être analysé

Par exemple:

string text = GetDateString(); // Name converted to follow .NET conventions 
if (string.IsNullOrEmpty(text)) 
{ 
    text = "9:00AM"; // Or whatever 
} 

DateTime parsed; 
if (!DateTime.TryParse(text, out parsed)) 
{ 
    parsed = // some default here 
} 

Pensez également à utiliser TryParseExact au lieu de TryParse, si vous savez quel format vous attendez et quelle culture vous voulez analyser.

Une alternative à avoir une valeur par défaut chaîne valeur est d'avoir juste une valeur par défaut DateTime et ne se souciant pas d'analyser si le texte est nul:

string text = GetDateString(); // Name converted to follow .NET conventions 
DateTime parsed; 

// This will only try to parse if text is non-null and non-empty 
if (string.IsNullOrEmpty(text) || !DateTime.TryParse(text, out parsed)) 
{ 
    parsed = // some default here 
} 
0

Il suffit d'écrire une fonction wrapper qui retourne la valeur par défaut lorsque validation échoue comme suit,

public DateTime Validate(string dateString) 
{ 
     DateTime dt; 
     if(DateTime.TryParse(dateString, out dt)) 
      return dt; 
     else 
      return DateTime.Now; //default value 


} 
+0

Vous ne pouvez pas définir DateTime dt = null –

+0

@TaronPro: Merci –

0
DateTime ToDateTime(string sourceValue){ 
    DateTime result; 
    if(DateTime.TryParse(sourceValue, out result) 
    return result 
    else{ 
    result=new DateTime(2013,1,1) //default value, whatever you want 
return result 
    } 
    } 
0

Il suffit de faire comme ceci:

DateTime MyDate; 
DateTime ParsedDate; 

if (DateTime.TryParse(txtNotificationDate.Text.Trim(), out ParsedDate)) 
{ 
    MyDate= ParsedDate; 
} 
else 
{ 
    MyDate = DateTime.Now; 
} 
Questions connexes