【问题标题】:Converting string to DateTime safely安全地将字符串转换为 DateTime
【发布时间】:2014-10-10 11:07:49
【问题描述】:
我有一个来自数据库的字符串,但我不确定它是否是有效的日期时间。
首先我试图验证它是否为空,
如果不为空,我想安全地将其转换为 DateTime,因为我不确定 row["a"].ToString 是否是有效的 DateTime
output.limitExpiryDate = row["a"] == DBNull.Value ? DateTime.Now : "something to convert here";
有人知道吗?
【问题讨论】:
标签:
c#
.net
type-conversion
【解决方案1】:
你可以使用DateTime.TryParse:
output.limitExpiryDate = DateTime.Now;
DateTime limitExpiryDate;
if(row["a"] != DBNull.Value && DateTime.TryParse(row.Field<string>("a"), out limitExpiryDate))
output.limitExpiryDate = limitExpiryDate;
这是一个可空的DateTime 列,您可以使用支持可空类型的Field method:
DateTime? limitExpiryDate = row.Field<DateTime?>("a");
if(limitExpiryDate.HasValue)
output.limitExpiryDate = limitExpiryDate.Value;
【解决方案2】:
CultureInfo provider = CultureInfo.InvariantCulture;
var format = "yyyy-MM-dd";
output.limitExpiryDate = row["a"] == DBNull.Value ? DateTime.Now : DateTime.ParseExact(row["a"], format, provider);
【解决方案3】:
类似这样的:
DateTime date = DateTime.Now;
if (row["a"] != null && row["a"] != DBNull.Value)
{
if (!DateTime.TryParse(row["a"], out date))
date = DateTime.Now;
}
output.limitExpiryDate = date;
如果您知道row["a"] 的日期时间格式,或者您可以使用TryParseExact 并指定格式。