2012-12-22 134 views
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计算在vb.net的时间跨度(在控制面板>日期和时间>更改日期和时间>更改日历设置>日期格式中找到)

如果更改计算机日期格式是这样的MM/DD/YY,我的应用程序提供了错误的线

昏暗dtStartDate截止日期= “17/12/2032”

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

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

回答

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 
+0

感谢。这真的很有用:) –

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

2

您可以使用日期文字,而不是文化独立。请参阅this article on MSDN

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

所以你可以这样写:

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