2017-07-31 137 views
-3

我不知道我在看什麼......爲什麼會產生一個異常「字符串未被識別爲有效的DateTime」?任何想法爲什麼這個DateTime.Parse產生一個錯誤?

string dt = "7/28/‎2018 ‏‎2:48:32 PM"; 
try 
{ 
    DateTime Test = DateTime.Parse(dt); 
} 
catch { } 

在我評論出來之前,我已經多次瀏覽了我的代碼,並用上面的代碼作爲測試。我分配給dt的值實際上是在我的程序中分配的值。我原本是使用類似的東西:

if (DateTime.TryParse(dt, out DateTime Timestamp)) 
{ ... } 

不是很重要,但我使用的是Visual Studio 2017和.Net 4.6.2。

+6

這意味着這並不是'CurrentCulture'設置的標準日期和時間格式。嘗試'ParseExact'或'TryParseExact'方法,而不是像'InvariantCulture'一樣使用'M/dd/yyyy h:mm:ss tt'格式和_proper_ culture。 –

+0

見下面的評論。我目前的文化設置正確。我想使用當前的文化,日期和時間將採用當前的文化形式。我剛剛完成重新安裝Visual Studio,現在它正在編譯並生成預期的輸出。 –

回答

0

問題是什麼在Visual Studio 2017年安裝的Re和現在的原代碼按預期工作。

2

DateTime.Parse()會嘗試猜測給定日期的格式。如果你確定的日期總是會以特定的格式使用ParseExact()

string dt = "7/28/‎2018 ‏‎2:48:32 PM"; 
try 
{ 
    DateTime Test = DateTime.ParseExact(dt, "M/dd/yyyy h:mm:ss tt", CultureInfo.InvariantCulture); 
} 

注意,H(也可以使用HH)是用來代替HH,因爲它是一個12小時制HH代表24小時格式

+0

我沒有考慮ParseExact(),因爲我不知道什麼格式我會花時間(可能或不可能有秒和/或am/pm)。也就是說,ParseExact仍然不起作用。而因爲它沒有,我嘗試了另一臺機器和原始代碼的工作。我的機器上有些東西是錯誤的。 +1,因爲它讓我想到在另一臺機器上嘗試它。 –

0

DateTime.Parse是文化敏感的。默認情況下,它使用CultureInfo.CurrentCulture來獲取正確的日期時間格式。如果您需要使用不同的文化分析字符串,則需要使用採用IFormatProvider參數的Parse重載。

例如,在一個不變的文化(持久性有用):

var dt = DateTime.Parse("07/31/2017 16:15:26", CultureInfo.InvariantCulture); 
Console.Write(dt.ToString(CultureInfo.InvariantCulture)); // 07/31/2017 16:15:26 
+0

感謝您的信息。我實際上想要使用當前的文化。如果它將在特拉維夫,上海的華沙舉辦,我需要使用當地的文化,並且投入將採用當地的文化形式。 它現在正在工作。我從另一臺機器編譯而不更改代碼。我的機器有問題。我正在刪除Visual Studio並重新安裝(是的,我試過重新啓動)。 –

相關問題