【问题标题】:DateTime String Conversion Error日期时间字符串转换错误
【发布时间】:2017-03-14 10:04:43
【问题描述】:

我似乎不明白为什么我的代码中出现DateTime 错误?

传递字符串时出现的错误是

从字符串“dd/MM/yyyy :00”到类型“日期”的转换无效

我正在执行如下所示的日期和时间解析

If IsDate(dateEnd) Then
    dateStartTime = If(IsTime(dateEndTime), dateEndTime, "00:00")
    blog.DateEnd = String.Format("{0} {1}:00", dateEnd, dateEndTime)
Else
    blog.DateEnd = Nothing
End If

日期Date.TryParseExact

Private Function IsDate(ByVal dateString As String) As Boolean
    Dim output As Boolean = False
    Dim dateFormat As String = "dd/MM/yyyy"
    If Date.TryParseExact(dateString.Trim, dateFormat, New CultureInfo("en-GB"), DateTimeStyles.None, Nothing) Then
        output = True
    End If
    Return output
End Function

时间解析

Private Function IsTime(ByVal timeString As String) As Boolean
    Dim timeRegex As New Regex("([0-1]\d|2[0-3]):([0-5]\d)")
    Return timeRegex.IsMatch(timeString)
End Function

它通过了所有的检查,然后产生了这条线的错误

blog.DateEnd = String.Format("{0} {1}:00", dateEnd, dateEndTime)

传入的字符串例如是13/03/2017 :00,具体取决于选择的日期。

有什么建议吗?

【问题讨论】:

  • 你的标题只是从特定格式的字符串转换而来的,所以在细节上你应该只指定那个(const)字符串,太多的非相关代码。
  • 嗨@LeiYang 传递的字符串如下13/03/2017 :00 取决于您选择的日期
  • 您的日期格式很奇怪,因此自动转换无法处理将字符串转换为日期的问题。你必须再次准确地解析它
  • 一切都与文化有关 - 不同的文化 => 不同的日期时间格式
  • 我成功了 C#:DateTime.TryParseExact("13/03/2017 :00", "dd/MM/yyyy :HH", new CultureInfo("en-US"), DateTimeStyles.None, out dt);

标签: asp.net vb.net date datetime


【解决方案1】:

解决了这个问题。我在应该是dateEndTime 而不是dateStartTime 的这一行上犯了一个错误。

dateStartTime = If(IsTime(dateEndTime), dateEndTime, "00:00")

所以最终的代码是

If IsDate(dateEnd) Then
    dateEndTime = If(IsTime(dateEndTime), dateEndTime, "00:00")
    blog.DateEnd = String.Format("{0} {1}:00", dateEnd, dateEndTime)
Else
    blog.DateEnd = Nothing
End If

不知道我是怎么错过的:(

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 1970-01-01
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多