我已从文件中读取此字符串:23/07/1998
。这是一个完全有效的日期字符串。它没有歧义,因为那里(看起来)那些数字只是解析它的一种可能方式。
DateTime.TryParse
告诉我它无效。我怀疑这是由于我的文化设置。
TryParse的变体相当复杂,所以我想知道是否有一种简单的方法可以用" dd / MM / yyyy"来解析它?
答案 0 :(得分:4)
TryParse不知道您的日期是MM / dd / yyyy还是dd / MM / yyyy。这对观察者来说是显而易见的,因为我们可以推断出没有第23个月的事实。但它不知道02/03/1998是什么。
DateTime.ParseExact(dateString, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture)
将告诉它使用哪种格式。
答案 1 :(得分:1)
Dim iString As String = "01/12/1998"
Dim oDate As DateTime = DateTime.ParseExact(iString, "dd/MM/yyyy", System.Globalization.CultureInfo.InvariantCulture)
MsgBox(oDate.ToString())
答案 2 :(得分:0)
与已经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