好吧,所以当涉及到VB中可用的功能时,我并不是非常注重导向。 我有一个包含当前日期和时间的字符串,需要将其转换为整数,以便我可以比较时间。
Dim my_str as String = "201308281110"
Dim my_int as Integer = Convert.ToInt32(my_str)
我显然不能用这个字符串做到这一点。因为我认为它对于32位整数来说太长了。我尝试的所有其他转换也失败了。包括“ToInt64”,“Int”,“CInt”...那么,任何想法如何将这个较长的字符串转换为整数?
答案 0 :(得分:5)
为什么不只是简单地使用Date
?您可以将Dates
相互比较,因此无需使用整数进行比较。
Dim my_date as Date = DateTime.ParseExact(my_str, "yyyyMMddhhmm", System.Globalization.CultureInfo.InvariantCulture)
答案 1 :(得分:3)
通常我不会这样做。已经给出了几个正确的答案,但由于你还在学习VB.NET,我觉得更全面的答案会对你有所帮助。所以我的回答将重复其他人已经说过的一些内容。
Int64
和Decimal
类型确实足以容纳这样的数字。我怀疑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中,Long
是Int64
的假名,所以在大多数情况下,这就是你应该使用的。但是,如果您要使用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.Parse
和Convert.ToInt64
一样有效,因为它没有溢出(Int32.MaxValue
是2147483647):
Dim myLong1 = Long.Parse("201308281110")
Dim myLong2 = System.Convert.ToInt64("201308281110")
请注意,Long
与Int64
相同。