2014-10-17 22 views
-6

擴展方法爲什麼DateTime.TryParse會將我的號碼變成日期?

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。它不應該這樣做。我不確定它爲什麼這樣做。

+0

因爲它落到了'else'併成功試圖解析它!?它做了你所問的。如果你的解析方法有問題,你需要重新考慮使用'TryParse'或你之前的條件。 – 2014-10-17 15:06:29

+2

這是猜測你有一個'yyyy.MM.'格式,我懷疑。你爲什麼要轉換成一個字符串,然後解析呢?鑄造將是一個更好的主意......因爲它可以避免將所有東西都變成一個字符串... – 2014-10-17 15:06:41

+3

您的數據轉換非常狂野。我不驚訝你看到這樣的效果。你最好不要使用這樣的通用轉換邏輯。你的代碼應該知道預期的類型。 – usr 2014-10-17 15:06:50

回答

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格式。上面的代碼只能按照指定的格式以字符串形式解析日期時間。

相關問題