2012-01-04 64 views
1

希望我不會重新創建一個已經問了1000次的東西,但是搜索它很困難,因爲'?' - s。字符串到DateTime?擴展轉換。*或更好的東西

我想在日期時間轉換字符串?在C#中。 什麼來實現這一目標比這種清潔方式:

private static DateTime? toDate(string probDate) 
    { 
     if (probDate == null) { return null; } 
     else { return Convert.ToDateTime(probDate); } 
    } 

由於提前,

哈利

+7

有作爲'字符串在C#中沒有這樣的東西',爲'string'是引用類型,因此可爲空已? – 2012-01-04 10:58:48

+0

你是對的,抱歉的錯字。 – Harry 2012-01-04 10:59:52

回答

1

我會使用extension方法(如果你使用.Net 3.5+)。它非常優雅並且可重複使用。

像這樣:

public static class Extensions 
{ 
    public static DateTime? ToNullableDate(this String dateString) 
    { 
     if (String.IsNullOrEmpty((dateString ?? "").Trim())) 
      return null; 

     DateTime resultDate; 
     if(DateTime.TryParse(dateString, out resultDate)) 
      return resultDate; 

     return null; 
    } 
} 


public class Test 
{ 
    public Test() 
    { 
     string dateString = null; 
     DateTime? nullableDate = dateString.ToNullableDate();    
    } 
} 
+0

這正是我要找的東西!擴展字符串看起來合法,那麼Convert呢? – Harry 2012-01-04 11:13:11

+0

據我所知,你不能擴展Convert,因爲它是一個靜態類。我會堅持擴展字符串。 – Chris 2012-01-04 11:22:17

3
private static DateTime? toDate(string probDate) 
{ 
    if (!string.IsNullOrWhiteSpace(probDate)) { 
     DateTime converted; 
     if (DateTime.TryParse(probDate, out converted)) 
     { 
      return converted; 
     } 
    } 
    return null; 
} 

這要看情況。如果probDate不能轉換,你想要發生什麼?該方法應該返回null還是拋出一個異常?

迴應置評#1

因爲你的方法簽名是私人的,我認爲這只是一個特定類的靜態輔助方法。如果這是你想要在整個應用程序重用的東西,我會創建一個擴展方法:

public static class StringExtensions 
{ 
    public static DateTime? ToDate(this string probDate) 
    { 
     // same code as above 
    } 
} 

然後,您可以執行這樣說:

string probDate = "1/4/2012"; 
DateTime? toDate = probDate.ToDate(); 
+0

如果設置了probDate,則默認情況下可以轉換它,因爲它是一個System set變量。它比這個細節的問題更少,而不是實現新功能的地方:擴展「轉換」還是其他什麼意義? – Harry 2012-01-04 11:07:27

2

那麼你至少可以使用條件:

private static DateTime? ToDate(string text) 
{ 
    return text == null ? (DateTime?) null : Convert.ToDateTime(text); 
} 

個人而言,我可能會使用DateTime.ParseExact與預期的格式,而不是Convert.ToDateTime,但是這是一個不同的問題。

你還沒有真正解釋這裏的大圖是什麼 - 文本來自哪裏? 是否有的預期格式?你需要對文化敏感嗎?如果文本無法解析,您希望發生什麼?

1
static class Program 
    { 

    //Extension method for string 
    public static DateTime? ToNullableDate(this string text) 
    { 
     return string.IsNullOrEmpty(text) ? (DateTime?)null : Convert.ToDateTime(text); 
    } 

    static void Main() 
    { 
     string s = null; 
     DateTime? d = s.ToNullableDate(); 

     s = "1/1/2012"; 
     d = s.ToNullableDate(); 
    } 
    }