为什么DateTime.TryParse将我的号码变成日期?

时间:2014-10-17 15:04:41

标签: c# parsing datetime

扩展方法

   public static class DBNullExt
    {
        public static string DBNToString(this object value)
        {
            if (value == System.DBNull.Value)
                return null;
            else
            {
                string val = value.ToString();
                DateTime test;

                if (DateTime.TryParse(val, out test))
                    return test.ToShortDateString();
                else
                    return val;
            }
        }
    }

使用它的地方

            using (SqlDataReader rdr = cmd.ExecuteReader())
            {
                if (rdr.HasRows)
                {
                    while (rdr.Read())
                    {
                        dtf.Date1 = rdr["date1"].DBNToString();
                        dtf.Date2 = rdr["date2"].DBNToString();
                        dtf.Cash = rdr["cash"].DBNToString();
                    }
                }
            }    

来自rdr["cash"].DBNToString()的价值是3685.02。但它不断将数据转换为3685/2/1。它不应该这样做。而且我不确定它为什么这样做。

1 个答案:

答案 0 :(得分:0)

public static class DBNullExt
{
    public static string DBNToString(this object value)
    {
        if (value == System.DBNull.Value)
            return null;
        else
        {
            string val = value.ToString();
            DateTime test;

            string format = "MM/dd/yyyy h:mm:ss tt";
            if (DateTime.TryParseExact(val, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out test))
                return test.ToShortDateString();
            else
                return val;
        }
    }
}

作为字符串,3685.022014.10是允许的DateTime格式。上面的代码只解析遵循指定格式的字符串形式的DateTimes。