vb.net字符串未被识别为有效的日期时间

vb.net字符串未被识别为有效的日期时间,vb.net,Vb.net,在我的VB应用程序中,我有一个名为setdateformat的函数 Public Function SetDateFormat(ByVal ArrayInputString As String) As String Dim FormattedDateString As String = "" Dim DateInput As DateTime = DateTime.Parse(ArrayInputString) FormattedDateString = DateInput.

在我的VB应用程序中,我有一个名为setdateformat的函数

Public Function SetDateFormat(ByVal ArrayInputString As String) As String

   Dim FormattedDateString As String = ""
   Dim DateInput As DateTime = DateTime.Parse(ArrayInputString)
   FormattedDateString = DateInput.ToString("yyyy-MM-dd HH:mm:ss")
   Return FormattedDateString

End Function
它的目的是格式化日期,但是在
Dim DateInput行中,它一直会被设置为DateTime=DateTime.Parse(ArrayInputString)
。我试着在网上四处寻找,进行调查,但没有结果。我试过使用dateTime.ParseExact,但没有成功

老实说,我真的很难理解为什么我会犯这样的错误,所以写这篇文章的原因非常感谢你的帮助

我已经调试了解决方案,但为了帮助阅读本文的人理解以下值正在变量中传递

ArrayInputString=2015年5月21日09:29:41

现在日期时间=2015年5月21日09:29:41

任何协助都将乐意接受


Paul在日期解析方面有一个特殊的含义和功能:它意味着“用当前区域性的真正日期分隔符替换我”。所以我猜你真正的日期分隔符是不同的,比如
或者
-

如果您查看调试器,它总是使用不变区域性而不是当前区域性,这解释了为什么您会看到日期像
5/21/2015 11:39:26 AM

您可以尝试多种方法:

Public Function SetDateFormat(ByVal inputString As String) As String
    Dim DateInput As DateTime
    Dim allowedCultures = {CultureInfo.CurrentCulture, CultureInfo.InvariantCulture}
    For Each culture In allowedCultures
        If Date.TryParse(inputString, culture, DateTimeStyles.None, DateInput) Then
            Return DateInput.ToString("yyyy-MM-dd HH:mm:ss")
        End If
    Next
    ' try ParseExact:
    Dim formats = {"yyyy-MM-dd HH:mm:ss", "dd/MM/yyyy HH:mm:ss"}
    If Date.TryParseExact(inputString, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, DateInput) Then
        Return DateInput.ToString("yyyy-MM-dd HH:mm:ss")
    Else
        Return Nothing
    End If
End Function

文档:

您还可以将ArrayInputString包装为#,并将DateInput暗显为date,然后再将其转换为FormattedDateString

Dim DateInput As Date = CDate("#" & ArrayInputString & "#")
FormattedDateString = DateInput.ToString("yyyy-MM-dd HH:mm:ss")

为什么要将
字符串命名为“ArrayInputString”?这是因为进入函数的字符串包含在数组中,如下所示(0)=0(1)=21/05/2015 09:29:41(2)=21/05/2016 09:29:41数组输入字符串将采用索引1,处理该字符串,然后移动到索引2方法不应该关心数组,方法应该是可重用的。您可以将其与任何字符串一起使用。嗨,Tim,非常感谢您的代码似乎可以做到这一点,但我必须将数组更改为以下Dim allowedCultures作为CultureInfo()={CultureInfo.CurrentCulture,CultureInfo.InvariantCulture},im格式作为string()={“yyyy-MM-dd HH:MM:ss”,“dd/MM/YYYYYY HH:MM:ss”}@保罗:我很高兴听到这有帮助。但是我不理解您的更改和我的代码之间的区别。嗨,Tim,如果不在Dim allowed cultures之后添加As CultureInfo(),我会得到一个编译错误(蓝色的曲线),说数组初始值设定项仅对数组有效,但allowedCultures的类型是Object。你能解释一下吗?@Paul:也许你没有在
上将
选项推断设置为
(我推荐)。也许是这样,这是一个我正在修复bug的旧解决方案。因此不确定是否设置了此选项。我添加的附加代码有问题吗?抱歉我的vb知识不是很好。谢谢