VB - 将长字符串数转换为整数

时间:2013-08-28 09:21:54

标签: vb.net

好吧,所以当涉及到VB中可用的功能时,我并不是非常注重导向。 我有一个包含当前日期和时间的字符串,需要将其转换为整数,以便我可以比较时间。

Dim my_str as String = "201308281110"
Dim my_int as Integer = Convert.ToInt32(my_str)

我显然不能用这个字符串做到这一点。因为我认为它对于32位整数来说太长了。我尝试的所有其他转换也失败了。包括“ToInt64”,“Int”,“CInt”...那么,任何想法如何将这个较长的字符串转换为整数?

3 个答案:

答案 0 :(得分:5)

为什么不只是简单地使用Date?您可以将Dates相互比较,因此无需使用整数进行比较。

Dim my_date as Date = DateTime.ParseExact(my_str, "yyyyMMddhhmm", System.Globalization.CultureInfo.InvariantCulture)

答案 1 :(得分:3)

通常我不会这样做。已经给出了几个正确的答案,但由于你还在学习VB.NET,我觉得更全面的答案会对你有所帮助。所以我的回答将重复其他人已经说过的一些内容。

Int64Decimal类型确实足以容纳这样的数字。我怀疑Convert.ToInt64不适合你的原因是因为你试图将结果存储在Integer变量中,如下所示:

Dim my_str as String = "201308281110"
Dim my_int as Integer = Convert.ToInt64(my_str)  ' Throws an OverflowException

失败的原因不是因为ToInt64不起作用。该部分声明实际上工作正常。失败的部分是您将my_int变量分配给值的位置。 my_int被声明为Integer。 VB.NET中的Integer类型实际上只是Int32的假名。换句话说,它实际上与此相同:

Dim my_str as String = "201308281110"
Dim my_int as Int32 = Convert.ToInt64(my_str)  ' Throws an OverflowException, just like the above example

要解决此问题,您需要将my_int变量的类型更改为Int64,以便它足以容纳从ToInt64函数返回的值。

Dim my_str as String = "201308281110"
Dim my_int as Int64 = Convert.ToInt64(my_str)  ' Works

在VB.NET中,LongInt64的假名,所以在大多数情况下,这就是你应该使用的。但是,如果您要使用Long,则使用ToInt64方法有点难看。在分配的两边使用Long会更容易阅读,如下所示:

Dim my_str as String = "201308281110"
Dim my_int as Long = Long.Parse(my_str)  ' Works, just like above

这也使得代码稍微安全一些,因为即使Long的大小在未来发生变化(但不太可能发生),它仍然可以正常工作。

Decimal类型也足以保存该值,但效率低于使用Long,因此我不推荐使用。

这引出了一个问题,然而,“你为什么要这样做?”如果你需要将值与另一个Long变量进行比较,那么这样做是有意义的,但是那么你是如何获得其他Long值的?如果要从字符串转换两个Long值,那么这样做是没有意义的。该字符串已经过格式化,可以很容易地与相同格式的其他字符串进行比较。例如:

Dim dateTime1 As String = "201308281110"
Dim dateTime2 As String = "201308281850"
If dateTime1 > dateTime2 Then
    ' Doesn't get here
End If
If dateTime1 < dateTime2 Then
    ' Get's here
End If
If dateTime1 = dateTime2 Then
    ' Doesn't get here
End If

但是,如果您需要解析值以读取其各个部分(例如日期,时间,年,月,小时),则将值转换为DateTime值更有意义。或者,如果您需要将字符串值与已存储在DateTime变量中的另一个值进行比较,那么在这种情况下,将字符串转换为DateTime值也是有意义的。在VB.NET中,DateTime的假名只是Date,因此在大多数情况下,您应该只使用它,如下所示:

Dim my_str as String = "201308281110"
Dim my_date as Date = Date.ParseExact(my_str, "yyyyMMddHHmm", System.Globalization.CultureInfo.InvariantCulture)
If my_date > Date.Now Then
    ' Do stuff
End If

答案 2 :(得分:0)

但是Long.ParseConvert.ToInt64一样有效,因为它没有溢出(Int32.MaxValue是2147483647):

Dim myLong1 = Long.Parse("201308281110")
Dim myLong2 = System.Convert.ToInt64("201308281110")

Demo

请注意,LongInt64相同。