如何转换为DateTime,但如果输入为空,则具有默认值
本文关键字:输入 默认值 如果 转换 何转换 DateTime | 更新日期: 2023-09-27 17:58:42
如果输入为空,哪个.NET
函数将转换为DateTime
但具有默认值?
例如。
DateTime dtTest = Convert.ToDateTime(getDateString());
如果getDateString()
返回空字符串,则Convert.ToDateTime
抛出异常。
如何使用默认值"9:00AM"
来代替空字符串?这是TryParse
可以使用的地方吗?
使用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}
我使用了一种叫做三元语句的东西。您可以在此处查看示例:MSDN
string myDate = getDateString();
DateTime dtTest = Convert.ToDateTime(String.IsNullOrEmpty(myDate) ? "my default value" : myDate);
三元语句如下:
String.IsNullOrEmpty(myDate) ? "my default value" : myDate
它可以读取如下:
如果字符串为null或空,则使用"我的默认值",否则使用myDate。
您应该将其分为两部分:
- 计算出要解析的字符串
- 如果字符串无法解析,请计算出您想要的结果
例如:
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
值,并且如果文本为空则不需要解析:
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;
}