3

我可以使用给定的代码计算 vb.net 中的时间跨度

    Dim dtStartDate As Date = "17/12/2032"
    Dim iNumberOfDays As Integer
    Dim tsTimeSpan As TimeSpan
    tsTimeSpan = Now.Subtract(dtStartDate)
    iNumberOfDays = tsTimeSpan.Days   'Where iNumberOfDays is the result of the timespan

当我的计算机时间格式为

dd-MMM-yy(位于控制面板> 日期和时间> 更改日期和时间> 更改日历设置> 日期格式。

如果我将计算机日期格式更改为类似MM/dd/yy的内容,我的应用程序会在该行中给出错误

将 dtStartDate 调暗为日期 = "17/12/2032"

错误是“从字符串“17/12/2032”到类型日期的转换无效。

我需要计算所有日期格式的时间跨度。如何解决问题?

4

3 回答 3

2

您可以改用日期文字,它们与文化无关。请参阅MSDN 上的这篇文章

您必须将日期文字括在数字符号 (# #) 内。您必须以 M/d/yyyy... 格式指定日期值... 此要求与您的区域设置和计算机的日期和时间格式设置无关。

所以你可以这样写:

Dim dtStartDate As Date = #12/17/2032#
于 2012-12-22T21:04:09.067 回答
1

您不应该使用这样的字符串文字来设置日期,因为日期字符串的解析方式将根据当前的文化而有所不同(正如您所发现的那样)。DateTime.ParseExact如果它必须是一个字符串,您可以使用以下方法绕过它:

Dim start As Date = Date.ParseExact("17/12/2032", "dd/MM/yyyy)

但是,如果它不需要是字符串,我建议使用DateTime构造函数将各个参数作为单独的整数文字传递:

Dim start As New Date(2032, 12, 17)

一旦你有了开始日期,你可以这样计算:

Dim span As TimeSpan = Date.Now - start
Dim days As Integer = span.Days 
于 2012-12-22T16:45:45.463 回答
1

从字符串转换为 DateTime 是 VB.NET 特有的功能,您无法用任何其他常见的 .NET 语言编写此代码。如果 Option Strict On 生效,它也不会在 VB.NET 中编译,这样的转换太容易出错。好吧,你找到了原因。

请改用以下任一解决方案:

 Dim dtStartDate As Date = New DateTime(2032, 12, 17)

或者如果你被字符串卡住了:

 Dim dtStartDate As Date = DateTime.Parse("17/12/2032", _
      System.Globalization.CultureInfo.InvariantCulture.DateTimeFormat)

使用该选项时,您需要记住调整 CultureInfo 以匹配输入字符串的格式。

于 2012-12-22T16:47:32.073 回答