DateTime.TryParse因完全有效的日期而失败

时间:2017-10-05 21:21:01

标签: vb.net datetime

我已从文件中读取此字符串:23/07/1998。这是一个完全有效的日期字符串。它没有歧义,因为那里(看起来)那些数字只是解析它的一种可能方式。

另一方面,

DateTime.TryParse告诉我它无效。我怀疑这是由于我的文化设置。

TryParse的变体相当复杂,所以我想知道是否有一种简单的方法可以用" dd / MM / yyyy"来解析它?

3 个答案:

答案 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/MMMM/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