Vb.net - 拆分字符串并转换为DateTime

时间:2015-07-27 13:42:42

标签: vb.net datetime datagridview split

我有1个名为IncomingMailDGV的datagridview。

内容栏上的示例数据:

R-1温度(6.25)在仓库-1的高位SLTCR上升至27/07/15 13:40
R-2温度(6.62)在27/07/15 13:42左右在商店的高位SLTCR上升 R-3温度(6.31)在仓库-2的高位SLTCR上升至27/07/15 13:45

注意:有些内容在邮件的最后部分有三个空格。

我想获得最后一部分的日期和时间并将其转换为这种格式:“M / dd / yyyy HH:mm tt”

我正在使用下面的代码,但它不起作用:

 Sub FilterAlert()
      Try

        Dim Dbcon As New OleDbConnection(connStr)

        Dbcon.Open()

        For x As Integer = 0 To IncomingMailDGV.Rows.Count - 1

            Dim line2 As String = IncomingMailDGV.Rows(x).Cells("Contents").Value.ToString
            Dim separators() As String = {",", " ", "(", ")"}
            Dim length As Integer = line2.Length
            Dim alertdatetime As String
            Dim alertdate_time As String


            data2 = line2.Split(separators, StringSplitOptions.RemoveEmptyEntries)

            alertdate_time = line2.Substring(length - 14, 14)

            Dim alertstring = alertdate_time.Split(separators, StringSplitOptions.RemoveEmptyEntries)

            alertdatetime = alertstring(0)

            alertdatetime = DateTime.ParseExact(alertdatetime, "dd/MM/yyHH:mm", Nothing)

    console.writeline (alertdatetime)
        Next

    Catch ex As Exception
        MsgBox(ex.Message.ToString)

    End Try

End Sub

更新:内容列上的某些单元格为空。

1 个答案:

答案 0 :(得分:1)

如果您的意思是日期和时间之间可能有多个空格,那么您可以从字符串中取出最后14个字符。以下代码假定日期和时间始终以“at”开头。如果字符串的格式不正确,你不清楚你想做什么,这段代码只是忽略了无效的字符串。

请注意,DateTime没有格式,只是数字。您可以使用DateTime.ToString以您想要的任何格式输出日期和时间。

此代码旨在替换For循环中的所有内容。

Dim line2 As String = IncomingMailDGV.Rows(x).Cells("Contents").Value.ToString
Dim pos As Integer = line2.LastIndexOf(" at ")
If pos < 0 Then Continue For

Dim alertstring() As String = line2.Substring(pos + 4).Split({" "c}, StringSplitOptions.RemoveEmptyEntries)
If alertstring.length <> 2 Then Continue For

Dim alertdatetime As DateTime 
If Not DateTime.TryParseExact(alertstring(0) & alertstring(1), "dd/MM/yyHH:mm", _
  System.Globalization.CultureInfo.InvariantCulture, Nothing, alertdatetime) Then Continue For 

Console.WriteLine(alertdatetime.ToString("M/dd/yyyy HH:mm tt"))