使用VB.net查找字符串中的所有日期和时间

时间:2016-01-06 15:10:22

标签: vb.net date search time

我有富文本框,有很多行,每行有2个或更少的日期和时间,例如:

08/10/2015 09:16:27 | Starting the main loop
08/10/2015 09:19:58 | Weight 
08/10/2015 10:01:28 | 08/10/2015 10:01:28 | Exception occurred: Timed out.
08/10/2015 11:13:02 | triggered
08/10/2015 11:14:08 | 08/10/2015 11:14:57 | Exception occurred: Timed out.

我想要做的是能够从每一行中提取日期和时间,并将它们存储到两个独立的数组中,一个用于日期,一个用于时间。

我设法做的是使用以下代码查找字符串中的日期总数。

Dim totalDates As MatchCollection = Regex.Matches("string to search here", "[0-9]*/[0-9]*/[0-9]{4}")
MessageBox.Show(totalDates.Count)

有没有办法从字符串中获取实际日期和时间?

谢谢

2 个答案:

答案 0 :(得分:1)

如果每次都使用相同的格式,您可以使用以下内容:

For Each item As String In RichTextBox1.Lines
    Dim split() = item.Split({" | "}, StringSplitOptions.RemoveEmptyEntries)
    split = split.Take(split.Length - 1).ToArray()
    For Each item2 As String In split
        ' Do your work here. Maybe you want to parse the dates?
        Dim date1 As DateTime = DateTime.Parse(item2)
        ' Do something with your Date here...
    Next
Next

这是.NET Fiddle的演示。

答案 1 :(得分:0)

您可以使用正则表达式提取日期,但我只推荐正则表达式作为最后的手段。 (在第一个答案中也避免了。)我的代码是旧式VB,第一篇文章是更现代的.Net风格。

这是我的通行证:

    Dim s As String = "08/10/2015 09:16:27 | Starting the main loop" & vbCrLf
    s &= " 08/10/2015 09:19:58 | Weight " & vbCrLf
    s &= " 08/10/2015 10:01:28 | 08/10/2015 10:01:28 | Exception occurred: Timed out." & vbCrLf
    s &= " 08/10/2015 11:13:02 | triggered" & vbCrLf
    s &= " 08/10/2015 11:14:08 | 08/10/2015 11:14:57 | Exception occurred: Timed out." & vbCrLf

    TextBox1.Text = s & vbNewLine

    Dim a() As String = s.Split({vbCr, vbLf, "|"}, StringSplitOptions.RemoveEmptyEntries)

    For Each s In a
        If IsDate(s) Then
            TextBox1.AppendText(CDate(s).ToShortDateString & "  :::  " & CDate(s).ToShortTimeString & vbNewLine)
        End If
    Next

您还可以使用测试控件的.Lines()属性逐行处理。