IsDate(“30/09/2017”)返回false,但我不知道格式

时间:2016-07-27 16:03:46

标签: vb.net datetime

我正在从Excel中导出的CSV文件中读取数据。然后我将值解析为标准格式,基本上是一些清理,并将其放入下一列。为此,我使用诸如IsNumericIsDate之类的VB函数来试图找出数据可能是什么。这对于数字等工作正常,但是日期失败。以下是我提交的真实数据文件中的一些示例:

200001
5/8/2014 0:00
30/09/2017 12:00:00 AM
2014-08-05
2017-09-30
04/06/2014 12:00:00 AM
30/06/2017 12:00:00 AM

结果如下:

200001  1/1/2000
5/8/2014 0:00   5/8/2014
30/09/2017 12:00:00 AM  1/1/1900
2014-08-05  8/5/2014
2017-09-30  9/30/2017
04/06/2014 12:00:00 AM  4/6/2014
30/06/2017 12:00:00 AM  1/1/1900

因此IsDate设法理解“200001”,“5/8/2014 0:00”和“04/06/2014 12:00:00 AM”,但未能理解完全有效的“2017/09/9凌晨12:00:00“。我知道这是由于mm / dd vs dd / mm,但由于我不知道哪一个被使用,逐行,有没有人建议如何处理这个?

按照下面的建议,我尝试了这个:

Public Function IsDMYDate(input As String) As Boolean
    Dim TempD As DateTime
    Dim formats() As String = {"d/M/yyyy h:mm:ss tt", "d/M/yyyy h:mm tt",
                             "dd/MM/yyyy hh:mm:ss", "d/M/yyyy h:mm:ss",
                             "d/M/yyyy hh:mm tt", "d/M/yyyy hh tt",
                             "d/M/yyyy h:mm", "d/M/yyyy h:mm",
                             "dd/MM/yyyy hh:mm", "dd/mm/yyyy hh:mm",
                            "d-M-yyyy h:mm:ss tt", "d-M-yyyy h:mm tt",
                             "dd-MM-yyyy hh:mm:ss", "d-M-yyyy h:mm:ss",
                             "d-M-yyyy hh:mm tt", "d-M-yyyy hh tt",
                             "d-M-yyyy h:mm", "d-M-yyyy h:mm",
                             "dd-MM-yyyy hh:mm", "dd-mm-yyyy hh:mm"}
    Return DateTime.TryParseExact(input, formats, New CultureInfo("en-US"), DateTimeStyles.None, TempD)
End Function

但它也会在这些日期返回false。然后我在查找各种CultureInfo设置后尝试了这个:

Public Function IsDMYDate(input As String) As Boolean
    Dim TempD As DateTime
    Dim Local As CultureInfo
    'now try things...
    Local = New CultureInfo("en-US")
    If DateTime.TryParse(input, TempD) Then
        Return True
    End If
    Local = New CultureInfo("en-GB")
    If DateTime.TryParse(input, TempD) Then
        Return True
    End If
    Local = New CultureInfo("en-AU")
    If DateTime.TryParse(input, TempD) Then
        Return True
    End If
    Return False
End Function

它总是返回false。

1 个答案:

答案 0 :(得分:-1)

a = [1, 2, 4, 8, 16]
b = [0, 1, 2, 3, 4]