【问题标题】: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 并指定格式。

        【讨论】:

          猜你喜欢
          • 2023-03-10
          • 2010-12-06
          • 2010-09-07
          相关资源
          最近更新 更多