我有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
更新:内容列上的某些单元格为空。
答案 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"))