入力が空白の場合、に変換されますがデフォルト値を持つ.NET
関数は何ですか?DateTime
例えば。
DateTime dtTest = Convert.ToDateTime(getDateString());
getDateString()
空の文字列を返す場合Convert.ToDateTime
、例外がスローされます。
"9:00AM"
空の文字列の代わりにデフォルト値を使用するにはどうすればよいですか? これはどこでTryParse
使用できるものですか?
私は三項ステートメントと呼ばれるものを使用しました。ここで例を見ることができます:MSDN
string myDate = getDateString();
DateTime dtTest = Convert.ToDateTime(String.IsNullOrEmpty(myDate) ? "my default value" : myDate);
三項ステートメントは以下のとおりです。
String.IsNullOrEmpty(myDate) ? "my default value" : myDate
そしてそれは次のように読むことができます:
文字列がnullまたは空の場合は、「my default value」を使用します。それ以外の場合は、myDateを使用します。
を使用し、解析が失敗した場合は、Minimum Date で時間を取得するようDateTime.TryParse
に割り当てることができます。DateTime.MinValue.AddHours(9)
(9:00AM)
string str = "";
DateTime temp;
DateTime dt = DateTime.TryParse(str, out temp) ? temp : DateTime.MinValue.AddHours(9);
上記のコードでは、dt
オブジェクトが保持します{01/01/0001 9:00:00 AM}
これを2つの部分に分ける必要があります。
例えば:
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
}
また、期待している形式と、それを解析するカルチャがわかっている場合は、TryParseExact
の代わりに使用することを検討してください。TryParse
デフォルトの文字列値を使用する代わりに、デフォルトDateTime
値を使用するだけで、テキストがnullの場合にわざわざ解析する必要はありません。
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
}
次のように、検証が失敗したときにデフォルト値を返すラッパー関数を記述します。
public DateTime Validate(string dateString)
{
DateTime dt;
if(DateTime.TryParse(dateString, out dt))
return dt;
else
return DateTime.Now; //default value
}
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
}
}
次のようにしてください:
DateTime MyDate;
DateTime ParsedDate;
if (DateTime.TryParse(txtNotificationDate.Text.Trim(), out ParsedDate))
{
MyDate= ParsedDate;
}
else
{
MyDate = DateTime.Now;
}