2

好吧,所以当谈到 VB 中可用的功能时,我并不是很了解。我有一个包含当前日期和时间的字符串,需要将其转换为整数,以便比较时间。

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

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

4

3 回答 3

5

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

Dim my_date as Date = DateTime.ParseExact(my_str, "yyyyMMddhhmm", System.Globalization.CultureInfo.InvariantCulture)
于 2013-08-28T09:28:50.343 回答
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 中,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
于 2013-08-28T13:17:25.743 回答
0

Long.Parse效果很好,Convert.ToInt64因为它不会溢出(Int32.MaxValue是 2147483647):

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

Demo

请注意, Long与 相同Int64

于 2013-08-28T09:27:10.880 回答