通常我不会这样做。已经给出了几个正确的答案,但是由于您仍在学习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