vb.Net时间跨度计算

时间:2012-12-22 16:39:48

标签: vb.net date format timespan

我可以使用给定的代码

计算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 ,我的应用程序会在行中显示错误

  

Dim dtStartDate As Date =“17/12/2032”

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

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

3 个答案:

答案 0 :(得分:2)

您可以使用日期文字,它们与文化无关。见this article on MSDN

  

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

所以你可以这样写:

Dim dtStartDate As Date = #12/17/2032#

答案 1 :(得分: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 

答案 2 :(得分: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以匹配输入字符串的格式。