2013-01-22 112 views
1

我想格式化日期時間列表。一個日期的格式與我所提供的格式相同,但因素不適用。該行代碼如下。有人能告訴我如何跳過下面的行錯誤嗎?DateTime轉換異常

Convert.ToDateTime("22-01-2013 00:00:00").ToString("yyyy-MM-dd"); 
+1

這段代碼有什麼問題?你在說什麼「因素」? –

+0

你有什麼異常? – davioooh

+0

試試這個,我沒有得到任何錯誤。你遇到了什麼錯誤?運行該應用程序的文化是什麼。 – Oded

回答

3

我會避免使用Convert.ToDateTime開始。我建議使用DateTime.TryParse或(最好是)DateTime.TryParseExact。這兩個都會返回一個值,指示轉換是否成功,所以您不需要開始捕獲異常以跳過不良數據。例如:

DateTime parsed; 
if (DateTime.TryParse(text, out parsed)) 
{ 
    string reformatted = parsed.ToString("yyyy-MM-dd"); 
    // Use reformatted 
} 
else 
{ 
    // Log error, perhaps? 
} 

如果你有多種可能的格式,你應該考慮using the overload of TryParseExact which allows you to specify multiple formats in a single call

以及格式,你應該考慮文化你想要使用。在上面的代碼(和你的代碼)中,它將使用執行線程的文化。那總是你想要的嗎?文化可以影響各種事物 - 通常如果你指定了自定義格式,你想使用不變文化。否則,你可能最終會使用非公曆意外,例如...

編輯:如果你的輸入總是格式dd-MM-yyyy,那麼你或許應該使用:

DateTime parsed; 
if (DateTime.TryParseExact(text, "dd-MM-yyyy", CultureInfo.InvariantCulture, 
          DateTimeStyles.Default, out parsed)) 
{ 
    string reformatted = parsed.ToString(CultureInfo.InvariantCulture, 
             "yyyy-MM-dd"); 
    // Use reformatted 
} 
else 
{ 
    // Log error, perhaps? 
} 
+0

如何將22-01-2013的格式轉換爲'yyyy-MM-dd'?我只需要'yyyy-MM-dd'的日期時間:( – NewBie

+0

@NewBie:如果您知道格式將始終爲'dd-MM-yyyy',則應該使用'TryParseExact'而不是'TryParse'。您的問題是在您的預期投入方面非常不明確。 –

2

代替Convert.ToDateTime使用DateTime.ParseDateTime.ParseExact

ParseExact讓您的格式更多的控制權,因此,例如:

DateTime.ParseExact("22-01-2013 00:00:00","dd-MM-yyyy HH:mm:ss",CultureInfo.InvariantCulture).ToString("yyyy-MM-dd"); 

還有一個TryParseExact變種,它允許你優雅處理解析錯誤。

0

嘗試使用DateTime.ParseExact()方法代替。

將指定的日期和時間字符串表示形式轉換爲其等效日期時間的 。

public static void Main(string[] args) 
{ 

    Console.WriteLine(DateTime.ParseExact("22-01-2013 00:00:00", "dd-MM-yyyy HH:mm:ss", CultureInfo.CurrentCulture).ToString("yyyy-MM-dd")); 

} 

這裏是一個DEMO

還檢查出Coding Best Practices Using DateTime in the .NET Framework我認爲每個.NET開發人員都應該閱讀。

0

嘗試與:

DateTime.ParseExact("22-01-2013 00:00:00","dd-MM-yyyy HH:mm:ss",CultureInfo.InvariantCulture).ToString("yyyy-MM-dd"); 

這樣你可以指定確切的格式爲您的日期字符串。