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。