通常我不会这样做。已经给出了几个正确的答案,但是由于您还在学习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
类型也将足够大以保存该值,但它会比 using 效率低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