我正在从Excel中导出的CSV文件中读取数据。然后我将值解析为标准格式,基本上是一些清理,并将其放入下一列。为此,我使用诸如IsNumeric
和IsDate
之类的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。
答案 0 :(得分:-1)
a = [1, 2, 4, 8, 16]
b = [0, 1, 2, 3, 4]