VB.Net将超过6个字符的字符串转换为时间跨度。例如hhhhh:mm:ss

时间:2016-08-26 14:39:08

标签: vb.net timespan

我得到一个整数字符串。它可能是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语句的最佳解决方案,还是有更好的内置方法来执行此操作?

3 个答案:

答案 0 :(得分:2)

我会这样做:

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#编写并转换它,但我希望它仍然有用。

答案 1 :(得分:1)

忘记代码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

等......很多代码。 它将变得非常难以理解。

答案 2 :(得分:0)

以下代码假定输入位于TextBox1中。它将整个字符串转换为整数,然后在创建Timespan之前分隔小时,分钟和秒。

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。