我從文件中讀取了此字符串:23/07/1998
。這是一個完全有效的日期字符串。它沒有含糊之處,因爲這些數字(似乎)只是解析它的一種可能的方式。DateTime.TryParse對於完美有效的日期無效
DateTime.TryParse
另一方面,告訴我它是無效的。我懷疑這是由於我的文化背景。
TryParse具有相當複雜的變化,所以我想知道是否有一種簡單的方法來解析「dd/MM/yyyy」?
我從文件中讀取了此字符串:23/07/1998
。這是一個完全有效的日期字符串。它沒有含糊之處,因爲這些數字(似乎)只是解析它的一種可能的方式。DateTime.TryParse對於完美有效的日期無效
DateTime.TryParse
另一方面,告訴我它是無效的。我懷疑這是由於我的文化背景。
TryParse具有相當複雜的變化,所以我想知道是否有一種簡單的方法來解析「dd/MM/yyyy」?
Dim iString As String = "01/12/1998"
Dim oDate As DateTime = DateTime.ParseExact(iString, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture)
MsgBox(oDate.ToString())
TryParse不知道您的日期是MM/dd/yyyy還是dd/MM/yyyy。這對觀察者來說是顯而易見的,因爲我們可以從事實上推斷出沒有23個月的事實,但它不知道02/03/1998是什麼。
DateTime.ParseExact(dateString, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture)
會告訴它要使用哪種格式。
簡明扼要的答案,非常好的解釋! +1 - **注意OP:**這兩個答案都提到了'ParseExact()',但也有[**'TryParseExact()'**](https://msdn.microsoft.com/ en-us/library/ms131044(v = vs.110).aspx)(儘管它有更令人討厭的語法;) –
奇怪的是,這個調用的macOS/Unix/Linux版本處理這個問題時沒有指定格式。它還處理諸如「明天」和「下個週二」等事情。看到.net版本比較簡單,因爲它的凍結日期大概是二十年後的樣子。 –
像已經mentioned by dwilliss常規DateTime.TryParse()
方法不能dd/MM
和MM/dd
區分,只有在一組標準的日期時間格式進行操作。要指定一個不同的格式,兼用DateTime.ParseExact()
或DateTime.TryParseExact()
如果你想要一個更討人喜歡語法,你可以創建一個extension method包裹DateTime.TryParseExact()
method。
Imports System.Globalization
Imports System.Runtime.CompilerServices
Public Module Extensions
<Extension()> _
Public Function TryParseDate(ByVal Input As String, ByVal Format As String, <Out()> ByRef Result As DateTime) As Boolean
Return DateTime.TryParseExact(Input, Format, CultureInfo.InvariantCulture, DateTimeStyles.None, Result)
End Function
End Module
現在你可以使用這樣的:
Dim DateString As String = "23/07/1998"
Dim ResultDate As DateTime = Nothing
If DateString.TryParseDate("dd/MM/yyyy", ResultDate) Then
MessageBox.Show("Success: " & ResultDate.ToString())
Else
MessageBox.Show("Input was not a valid date!")
End If
很煩人的語法!但它的工作。 –
@MauryMarkowitz請將其標記爲將其從未解答的問題隊列中移出的答案 –
雖然這可能會回答他的問題,但最好包含關於導致問題的原因以及您的答案爲何解決問題的說明(即,什麼是'Parse'和'ParseExact'之間的區別)。 _「僅限代碼」_-答案通常只會被忽視,因爲它們通常只會有助於解決問題,而不會教授任何OP或其他讀者。 –