我有字符串值17:00:25
怎么显示军事时间,比如1700 ?我正在调试它,像下面的
Dim time As String = String.Format("{0:hh:mm}", row("timereported"))
MessageBox.Show(time.ToString)
,实际代码是
For Each row As DataRow In table.Rows
rowInsert = DS.Tables(0).NewRow
Dim time As String = String.Format("{0:hh:mm}", row("timereported"))
rowInsert(0) = time
DS.Tables(0).Rows.Add(rowInsert)
Next row
但是显示为17:00:25
任何其他类型的转换或格式适合的格式?
如果列是TimeSpan…
For Each row As DataRow In table.Rows
rowInsert = DS.Tables(0).NewRow
Dim time As String = Format(New Date + CType(row("timereported"), TimeSpan), "HHmm") 'this line changed'
rowInsert(0) = time
DS.Tables(0).Rows.Add(rowInsert)
Next row
如果列是字符串…
For Each row As DataRow In table.Rows
rowInsert = DS.Tables(0).NewRow
'new code starts'
Dim time As String = ""
Dim tsp As TimeSpan
If TimeSpan.TryParse(CStr(row("timereported")), tsp) Then
time = (New Date + tsp).ToString("HHmm")
End If
'new code ends'
rowInsert(0) = time
DS.Tables(0).Rows.Add(rowInsert)
Next row
Const militaryTimeFormat As String = "HHmm"
' convert to a string in military time
Dim input As String = DateTime.Now.ToString(militaryTimeFormat)
MsgBox(input)
我建议使用数据row的强类型Field
方法来获得TimeSpan的值(您提到它在mySQL中存储为时间数据类型,因此这是正确的。net等效)
可以设置时间跨度的格式。注意时间跨度格式与日期时间格式不同:
For Each row As DataRow In table.Rows
rowInsert = DS.Tables(0).NewRow
Dim time As String = row.Field(Of TimeSpan)("timereported").ToString("hhmm")
rowInsert(0) = time
DS.Tables(0).Rows.Add(rowInsert)
Next row
参考如下:
Dim ts As New TimeSpan(17, 0, 25)
Debug.WriteLine(ts.ToString("hhmm"))
输出1700
我个人不会尝试格式化字符串值来获得datetime值,否则你会拒绝自己访问。net固有的datetime处理功能。
处理datetime值的一种更安全的方法是:
- 如果从数据库返回数据,返回datetime或datetimeoffset值。
- 如果它是一个用户条目,并且你正在处理一个字符串(这是我能想到的唯一可以保证这一点的场景),那么验证并转换为datetime值。
在尝试格式化之前,值应该是datetime
这将给您留下一个干净的方法来处理这个问题,使用格式代码"t"来放置参数,并且不会出现无效值的问题。
重要的是,如果您的站点是多语言的,它还可以使您的代码文化安全。例如en-GB将显示"17:00",而en-US将显示"5:00pm"。那么对于你的代码,它将会是…
Dim time As String = String.Format("{0:t}", row("timereported"))
这将为您提供格式为"HH:mm",或者在您的示例中为"17:00"。