2010-04-09 66 views
0

我是amol kadam,我想知道如何拆分字符串中的两部分。我的字符串是时间格式(12:12)。 &我想在分钟格式&分钟格式。所有变量的数据类型都是字符串。对于使用strTimeHr &为分钟strTimeMin。我小时可变尝试下面的代码,但他们是一个例外“索引和长度必须引用位置在字符串中 参数名:长度”如何在vb.net中拆分组中的字符串

   If Not (objDS.Tables(0).Rows(0)("TimeOfAccident") Is Nothing Or objDS.Tables(0).Rows(0)("TimeOfAccident") Is System.DBNull.Value) Then 
        strTime = objDS.Tables(0).Rows(0)("TimeOfAccident") 'strTime taking value 12:12 
        index = strTime.IndexOf(":")      'index taking value 2 
        lastIndex = strTime.Length       'Lastindex taking value 5 

        strTimeHr = strTime.Substring(0, index)    'strTime taking value 12 correctly 
    strTimeMin = strTime.Substring(index + 1, lastIndex) 'BUT HERE IS PROBLEM OCCURE strTimeMin Doesn't taking any value 
        Me.NumUpDwHr.Text = strTimeHr 
        Me.NumUpDwMin.Text = strTimeMin 
       End If 
+0

什么是列的数据类型“ TimeOfAccident“? – Thomas 2010-04-09 05:09:17

回答

1

(assumming可以确保格式)最简单的方法是使用一个分裂:

dim strTime as string = objDs.Tables(0).Rows(0).("TimeOfAccident") 
dim timeParts() as string = split(strTime,":") 
dim strTimeHr as string = timeParts(0) 
dim strTimeMn as string = timePartS(1) 

您还需要一些错误处理来检查格式,并且分割会生成至少包含两个元素的数组,而不是。

编辑:仔细查看你的代码后,我看到了你的错误的原因。

你有这样的代码:

lastIndex = strTime.Length 
strTimeHr = strTime.Substring(0, index) 
strTimeMin = strTime.Substring(index + 1, lastIndex) 

随着最后一行给出错误。

你得到这个错误的原因是VB.Net中的字符串(和其他数组)是基于ZERO的。这就是为什么在strTimeHr字段中,你是从0开始的。长度为你提供了计数,因为数组是基于零的,意味着计数将比可用索引多一个。

即在从零开始的数组中的最后一个元素是数组的减1

因此长度,改变你原来的代码如下:

lastIndex = strTime.Length - 1 
strTimeHr = strTime.Substring(0, index) 
strTimeMin = strTime.Substring(index + 1, lastIndex) 

也能发挥作用。

+0

好的谢谢。我试试这个&回来很快 – 2010-04-09 05:07:27

+0

谢谢...它的工作原理 – 2010-04-09 05:37:42

0

试着这么做(String.Split Method

Dim str As String = "12:13" 
Dim strHr = str.Split(":")(0) 
Dim strMin = str.Split(":")(1) 
1
string s = "12:13"; 
DateTime dt = DateTime.Parse(s); 

Console.Write(dt.Hour + " " + dt.Minute); 
0

是“TimeOfAccident”列的数据类型DateTime?如果是的话,那么最简单的解决办法是这样的:

'Using LINQ to convert the value to a nullable datetime. 
Dim timeOfAccident As Nullable(Of DateTime) = dt.Rows(0).Field(Of Nullable(Of DateTime))("TimeOfAccident") 

If timeOfAccident.HasValue Then 
    Me.NumUpDwHr.Text = timeOfAccident.Hour 
    Me.NumUpDwMin.Text = timeOfAccident.Minute 
End If 

如果列“TimeOfAccident”是一个字符串,那么你可以这样做:

Dim timeOfAccidentString As String = dt.Rows(0).Field(String)("TimeOfAccident") 

If Not String.IsNullOrEmpty(timeOfAccidentString) Then 
    Dim accidentTime As DateTime = DateTime.Parse(timeOfAccidentString) 
    Me.NumUpDwHr.Text = timeOfAccident.Hour 
    Me.NumUpDwMin.Text = timeOfAccident.Minute 
End If