VB.Net 时间跨度计算

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之类的格式,我的应用程序会在以下代码行中出错:

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

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

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

3个回答

2
您可以使用日期字面量,它们是与文化无关的。请参阅MSDN上的此文章:(链接已提供)

您必须用数字符号(# #)将日期字面量括起来。您必须以M/d/yyyy格式指定日期值...不论您的区域设置和计算机的日期和时间格式设置如何,这都是必需的。

因此,您可以这样写:
Dim dtStartDate As Date = #12/17/2032#

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以匹配输入字符串的格式。


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 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接