Vb.net 将字符串转换为日期时间或时间值

Vb.net 将字符串转换为日期时间或时间值,vb.net,Vb.net,我在尝试将字符串转换为DateTime或TimeValue时遇到问题。 我制作了一个小窗口窗体作为示例。请查看以下表格: 如您所见,有一个文本框1。 还有一个间隔为1000 ms的计时器1 我想要的是能够在文本框中填写一个时间(像这样的格式:22:30:00),当您的桌面到达这个时间时,它将显示一个messagebox 我试过几篇有类似问题的旧文章和教程,但似乎找不到解决办法。也许有人能用我的截图举个简单的例子吗 这是别人建议的代码 Dim tsValue As TimeSpan = Time

我在尝试将字符串转换为DateTime或TimeValue时遇到问题。 我制作了一个小窗口窗体作为示例。请查看以下表格:

如您所见,有一个文本框1。 还有一个间隔为1000 ms的计时器1

我想要的是能够在文本框中填写一个时间(像这样的格式:22:30:00),当您的桌面到达这个时间时,它将显示一个messagebox

我试过几篇有类似问题的旧文章和教程,但似乎找不到解决办法。也许有人能用我的截图举个简单的例子吗

这是别人建议的代码

Dim tsValue As TimeSpan = TimeSpan.Zero 

If TimeSpan.TryParse(TextBox1.Text.Trim, tsValue) Then 
    If Date.Now.TimeOfDay = tsValue Then
        MessageBox.Show(String.Format("Messagebox test {0}", tsValue.ToString)) 
    End If 
End If 

但由于某些原因,当我将其放入计时器时,它不起作用。

保留一个带有目标时间的变量(假设它通过验证),并让计时器检查目标时间是否与当前时间匹配。确保您的计时器在日期更改时更新日期(上午12:00)


代码不起作用的原因是使用“=”运算符比较两个极不可能相等的值。问题是,您在TextBox控件中输入的时间值没有毫秒,但TimeOfDay函数返回当前时间(包括毫秒)。因此,您的消息框永远不会显示


现在,有多种方法可以解决这个问题,但让我们保持简单。如果您将“=”更改为“1)不要使用不相关的标签2)不要在其他地方发布图片,请在此处发布您尝试过的代码。请参阅@puropoix OP缺少可发布到图片的代表,因为它需要10个代表。(否则,我同意您的评论)@jordesteyaert-将来,不要将代码放在注释中,它不会格式化并且很难阅读。相反,编辑你的问题并将其添加到那里(就像我刚才做的那样).@Tim刚刚注意到这一点,因为这是我第一次使用此网站。我更新了我的问题。谢谢你的回复!我尝试了你的代码,但在我填写时间时没有出现消息框。我必须以什么格式在文本框中输入时间?hh:mm:ss?与你的问题完全相同。请确保你的计时器的间隔小于一秒钟。间隔250应该足够了。我将间隔改为800,现在它可以正常工作了。谢谢@NoAlias的帮助。每天学习新东西:)DateTimePicker确实会更好。如果你看看@NoAllias的代码,我将如何更改TextBox1.Text.Substring(3,2)到DateTimePicker的值?您没有。DateTimePicker具有日期数据类型的value属性。这意味着,您可以使用DateTimePicker1.value.Minute简单地提取分钟部分,或者您可以使用DateTimePicker1.value.TimeOfDay将该值转换为TimeSpan,并使用它执行任何操作。感谢提供的信息,我们将尝试使用它在我的项目上。一旦你学会了如何使用它,听起来很有逻辑
Private m_dteTime As DateTime
Private m_dteCurrentDate As Date = DateTime.Now.Date

Private Sub TextBox1_TextChanged(sender As Object, e As EventArgs) Handles TextBox1.TextChanged

    'Validation
    Try
        Dim strHours As String = TextBox1.Text.Substring(0, 2)
        Dim strMinutes As String = TextBox1.Text.Substring(3, 2)
        Dim strSeconds As String = TextBox1.Text.Substring(6, 2)

        If IsNumeric(strHours) AndAlso IsNumeric(strMinutes) And IsNumeric(strSeconds) Then

            m_dteTime = DateTime.Now.Date.AddHours(Convert.ToDouble(strHours)).AddMinutes(strMinutes).AddSeconds(strSeconds)

        Else

            m_dteTime = DateTime.MinValue

        End If

    Catch ex As Exception

    End Try

End Sub

Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick

    If DateTime.Now.Date > m_dteCurrentDate Then

        m_dteCurrentDate = DateTime.Now.Date

    End If

    If m_dteTime.Date = DateTime.Now.Date AndAlso m_dteTime.Hour = DateTime.Now.Hour AndAlso _
       m_dteTime.Minute = DateTime.Now.Minute AndAlso m_dteTime.Second = DateTime.Now.Second Then

        MsgBox("The time is now.")

    End If

End Sub