我可以使用给定的代码
计算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“到输入日期无效。
我需要以所有日期格式计算时间跨度。如何解决问题?
答案 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以匹配输入字符串的格式。