通常我不會這樣做。已經給出了幾個正確的答案,但由於您仍然在學習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
值,那麼這樣做沒有意義。該字符串已被格式化,可以方便地與其他格式相同的字符串進行比較。例如:
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
我發現做一些測試,一個整數實際上不能持有數量任何超過10位的數字! 那麼,長整數的另一種數據類型是什麼呢? 編輯:如果可能,無小數點 –
小數點有什麼問題? – Heinzi
爲什麼要轉換爲數字呢?爲什麼日期/時間通常是這樣格式化的,所以你可以對它們進行簡單的字符串比較。我並不是說像這樣格式化它是一個好主意,但只要它們已經以這種方式格式化,就可以將它們作爲字符串進行比較。 –