2016-08-17 85 views
0

輸入值=「3:10 PM」或「15:10」取決於控制面板中的區域設置。 設置爲印度時輸入值爲「15:10」,當設置爲美國輸入值時爲「3:10 PM」。我必須每次都將輸入值轉換爲「1899-12-30 15:10:00.000」,以便在解析其顯示錯誤時「字符串未被識別爲有效日期時間」。字符串未被識別有效日期時間

Private Function GetCurrentTime(ByVal value As String) As DateTime 
     Dim oaDate As DateTime 
     Dim timeValue As DateTime 

     oaDate = DateTime.FromOADate(0) 
     value = String.Concat(oaDate.Year, oaDate.Month, oaDate.Day, value) 
     timeValue = DateTime.ParseExact(value, "yyyyMMddHH:mm", Globalization.CultureInfo.InvariantCulture) 
     Return timeValue 

    End Function 
+0

在MSDN上嘗試這篇文章。 https://msdn.microsoft.com/en-us/library/w2sa9yss(v=vs.110).aspx –

回答

0

如果你是取決於文化,那麼你不能使用以下行來解析字符串輸入可以是不同的:

timeValue = DateTime.ParseExact(value, "yyyyMMddHH:mm", Globalization.CultureInfo.InvariantCulture) 

因爲你已經有了一個固定的格式和你正在指定一個不變的文化。

如果輸入可能無效,您應該捕獲異常並顯示合適的錯誤消息,或使用TryParseExact並顯示合適的錯誤消息(如果返回false)。

您必須檢查當前的文化,並調用您當前的代碼或美國的代碼,或者依次使用TryParseExact依次測試每種可能的格式,直到找到一個產生有效日期的格式。 TryParseExact有一個超載格式字符串列表,因此您可以在進行中檢查。你需要像這樣(道歉的C#語法):

string[] formats = {"yyyyMMddHH:mm", "yyyyMMddh:mm"}; 
DateTime result 
if (TryParseExact(value, formats, ..., out result)) 
{ 
    // use the result 
} 
else 
{ 
    // invalid input 
} 

但是,(這是一個很大的不過),你可以得到其中輸入可以在一個以上的文化是有效的情況下,你最終可能會導致錯誤的結果。

相關問題