2013-08-23 47 views
10

我知道如何將DateTime格式化爲String。可能有很多方法將DateTime格式化爲String,並且我發現幾個與DateTime格式相關的問題。我應該使用ToString()還是GetDateTimeFormats()來格式化DateTime?

但我發現,試圖通過兩條途徑:

  1. GetDateTimeFormats()
  2. ToString("MM/dd/yyyy")

我試過這段代碼:

public static class DateTimeFormates 
{ 
    public static string FormatMyDate(this DateTime DT) 
    { 
     // My Actual Date Time Comes in this Format 
     //8/23/2013 12:43:12 PM 

     // I'm expecting Format like below 

     String FormatWayOne = DT.GetDateTimeFormats()[3]; 
     //08/23/2013 

     String FormatWayTwo = DT.ToString("MM/dd/yyyy"); 
     //08/23/2013 

     return FormatWayOne; 
    } 
} 

我有一個GlobalGlobal方法格式爲DateTime作爲String。但在這裏,我想知道哪種方法是最佳實踐,因此我可以使用它?該方法在整個應用程序中調用。

+2

僅供參考'DateTime'沒有任何格式。它被存儲爲「Long(Ticks)」。 'DateTime'的字符串表示只擁有格式 –

+4

+1奇怪,從未聽說過'DateTime.GetDateTimeFormats'。 –

回答

8

GetDateTimeFormats不是ToString的替代品,反之亦然。如果您知道您想要的格式,則無需撥打GetDateTimeFormats。除了它更清澈使用ToString,該documentGetDateTimeFormats指出這(重點煤礦)

因爲這種方法使用的文化敏感的數據,你不應該假設 是該方法的多個調用將返回相同數據。如果當前文化發生變化, 用戶覆蓋個別文化設置,或者系統的文化數據發生更新,則此方法返回的數據 可能會更改。

這可能會破壞您的代碼,因爲在另一種文化中運行時,第三個元素可能是其他內容。

通過使用ToString,您可以避免必須循環遍歷所有日期格式(因此效率更高),並且在確保返回的格式是您想要的格式時,可以更清晰地表明您喜歡的格式。

+1

是真的。如果你知道你想要什麼 - 打電話。無需使用存儲桶提取並選擇它。 – no9

6

ToString更清晰,也不會使用可能無法在下一個框架版本/另一種文化中使用的幻數。使用ToString()

3

哪一個是很好的做法或最佳方式

兩者都好適合自己的需求。

這兩種方式的區別?

GetDateTimeFormats()

這種情況下的以標準的日期和時間格式說明支持的所有字符串表示的值轉換。這意味着它是一個昂貴的操作,每次獲得第三個元素可能會給你不同的結果。你不需要轉換爲所有格式,爲什麼這麼做?

ToString()

使用指定格式的當前DateTime對象爲其等效的字符串表示的值轉換。

任何意見或建議?

作爲第二種方法(ToString)只能轉換爲您所需的格式並且更具可讀性。因此是可取的。而如果您使用第一種方法,則只需要一種方法即可將其轉換爲大約100種格式。

2

我一直在使用.ToString(格式)多年,它永遠不會讓我失望。您可以使用內置格式,或自定義您自己的格式。

3

我更喜歡ToString(format)版本。但不是你以例子顯示的格式。它可以讓你穿越文化。 我們來看看下面的例子。

DateTime now = DateTime.Now; 

    string fmt1 = now.ToString("MM/dd/yyyy"); // MM/dd/yyyy 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us") 
    { 
     DateTimeFormat= 
     { 
      DateSeparator = "-" 
     } 
    }; 
    string fmt1a = now.ToString("MM/dd/yyyy"); // MM-dd-yyyy (you're in trouble when you want to deserialize) 

    string fmt2 = now.ToString("MMddyyyy"); // MMddyyyy 
    Thread.CurrentThread.CurrentCulture = new CultureInfo("en-us") 
    { 
     DateTimeFormat = 
     { 
      DateSeparator = "-" 
     } 
    }; 
    string fmt2a = now.ToString("MMddyyyy"); and // MMddyyyy always 

我不會在這裏談論GetDateTimeFormats因爲這是一個矯枉過正。

想知道如何fmt1a可以返回MM-dd-yyyy當你說MM/dd/yyyy?因爲/是用於表示當前文化的DateTimeFormatInfo.DateSeperator的特殊字符。

因此,我建議您使用自定義格式,而不要使用/來進行序列化和任何其他格式的UI。

2

如果你只想要日期和我看到的,文化的格式是正確的,只是使用datetime方法ToShortDateString

MyDateTime.ToShortDateString(); 

但在extesion方法使用這沒有任何意義。如果您想以任何格式轉換任何日期以始終以MM/dd/yyyy顯示,則應先設置文化和電話方法。

在這裏獲得正確的代碼使用http://msdn.microsoft.com/es-es/library/system.datetime.toshortdatestring.aspx

+0

雅我同意這也是一種方式。, – RajeshKdev

+0

編輯修復一些拼寫錯誤 – Gonzix

相關問題