VB.Net 将大于 6 个字符的字符串转换为时间跨度。例如hhhhh:mm:ss
VB.Net Cast string larger than 6 characters to timespan. For example hhhhh:mm:ss
我得到一个整数字符串。它可能是 512,也可能是 15215534。第一个是 5 分钟。 12 秒。第二个数字是 1521 小时 55 分 34 秒。这是我现在使用的:
Dim input As String
Dim time As TimeSpan
Dim length As Integer
length = input.Length
'Return 0 if null
If length = 0 Then
result = 0
Return result
End If
time = New TimeSpan(0, input.Substring(0, length - 4), input.Substring(length - 4, 2), input.Substring(length - 2, 2), 0)
对于 4 个或更短字符长度的输入,代码现在会出错。我的最佳解决方案是使用不同长度的 if 语句还是有更好的内置方法来做到这一点?
忘记代码 John Bustos 做得更好!
最简单的方法可能是让您的输入成为总秒数,然后进行计算。
如果你不能,你必须确保你有从右到左读取数字的语法。
Dim Number as String = ActualNumber.ToString
Dim Seconds as Integer = 0
If Number.Length = 0 Then GoTo SkipWhatEver
If Number.Length < 3 Then
Seconds = CInt(Number)
Else
Seconds = Cint(Number.Substring(Number.Length-2,2)
End If
Number = Number.Substring(0, Number.Length-2)
Dim Minutes as Integer = 0
等等……很多代码。
它会变得很难读。
我会这样做:
Dim input as String = "2133"
input = input.PadLeft(5, '0')
Dim seconds = Convert.ToInt32(input.Substring(input.Length - 2, 2))
Dim minutes = Convert.ToInt32(input.Substring(input.Length - 4, 2))
Dim hours = Convert.ToInt32(input.Substring(0, input.Length - 4))
Dim time = new TimeSpan(hours, minutes, seconds)
基本上,您知道最后的秒最多有 2 位数字,接下来的 2 位是分钟,前面的任何数字都是小时。
如果你的字符串中没有分钟或小时(甚至只有一秒钟),那么挑战就是 - 所以,你在开始时用足够的 0
填充你的字符串以确保你赢了'得到任何问题然后解析出你需要的数字。
我是用C#写的,然后转换过来的,希望它还能用。
以下代码假定输入在 TextBox1 中。它将整个字符串转换为整数,然后在创建时间跨度之前分隔小时、分钟和秒。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim num, hhhh, mm, ss As Integer
Dim input As String = TextBox1.Text
If Not Integer.TryParse(input, num) Then
MessageBox.Show("Invalid time")
Exit Sub
End If
ss = num Mod 100
mm = (num \ 100) Mod 100
hhhh = num \ 10000
If ss > 59 Or mm > 59 Then
MessageBox.Show("Invalid time")
Exit Sub
End If
Dim time As TimeSpan = New TimeSpan(hhhh, mm, ss)
End Sub
我包括检查以确保输入确实是一个整数并且分和秒不超过 60。
我得到一个整数字符串。它可能是 512,也可能是 15215534。第一个是 5 分钟。 12 秒。第二个数字是 1521 小时 55 分 34 秒。这是我现在使用的:
Dim input As String
Dim time As TimeSpan
Dim length As Integer
length = input.Length
'Return 0 if null
If length = 0 Then
result = 0
Return result
End If
time = New TimeSpan(0, input.Substring(0, length - 4), input.Substring(length - 4, 2), input.Substring(length - 2, 2), 0)
对于 4 个或更短字符长度的输入,代码现在会出错。我的最佳解决方案是使用不同长度的 if 语句还是有更好的内置方法来做到这一点?
忘记代码 John Bustos 做得更好!
最简单的方法可能是让您的输入成为总秒数,然后进行计算。
如果你不能,你必须确保你有从右到左读取数字的语法。
Dim Number as String = ActualNumber.ToString
Dim Seconds as Integer = 0
If Number.Length = 0 Then GoTo SkipWhatEver
If Number.Length < 3 Then
Seconds = CInt(Number)
Else
Seconds = Cint(Number.Substring(Number.Length-2,2)
End If
Number = Number.Substring(0, Number.Length-2)
Dim Minutes as Integer = 0
等等……很多代码。 它会变得很难读。
我会这样做:
Dim input as String = "2133"
input = input.PadLeft(5, '0')
Dim seconds = Convert.ToInt32(input.Substring(input.Length - 2, 2))
Dim minutes = Convert.ToInt32(input.Substring(input.Length - 4, 2))
Dim hours = Convert.ToInt32(input.Substring(0, input.Length - 4))
Dim time = new TimeSpan(hours, minutes, seconds)
基本上,您知道最后的秒最多有 2 位数字,接下来的 2 位是分钟,前面的任何数字都是小时。
如果你的字符串中没有分钟或小时(甚至只有一秒钟),那么挑战就是 - 所以,你在开始时用足够的 0
填充你的字符串以确保你赢了'得到任何问题然后解析出你需要的数字。
我是用C#写的,然后转换过来的,希望它还能用。
以下代码假定输入在 TextBox1 中。它将整个字符串转换为整数,然后在创建时间跨度之前分隔小时、分钟和秒。
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim num, hhhh, mm, ss As Integer
Dim input As String = TextBox1.Text
If Not Integer.TryParse(input, num) Then
MessageBox.Show("Invalid time")
Exit Sub
End If
ss = num Mod 100
mm = (num \ 100) Mod 100
hhhh = num \ 10000
If ss > 59 Or mm > 59 Then
MessageBox.Show("Invalid time")
Exit Sub
End If
Dim time As TimeSpan = New TimeSpan(hhhh, mm, ss)
End Sub
我包括检查以确保输入确实是一个整数并且分和秒不超过 60。