【发布时间】:2014-01-05 06:24:57
【问题描述】:
我想在单独的文本框中获取两个日期时间选择器在年、月和日中选择的两个日期之间的差异。
我试过了:
txtyrs.text = datediff(datetimepicker1,datetimepicker2)
它不工作。
【问题讨论】:
标签: vb.net
我想在单独的文本框中获取两个日期时间选择器在年、月和日中选择的两个日期之间的差异。
我试过了:
txtyrs.text = datediff(datetimepicker1,datetimepicker2)
它不工作。
【问题讨论】:
标签: vb.net
试试这个:
Dim date1 As Date = Date.Now
Dim date2 As Date = date1.AddDays(4.0#)
Dim span = date2 - date1
Dim days As Double = span.TotalDays '=4
如果您想提取年份,请查看 this post。
【讨论】:
使用TimeSpan 和一些日期计算,这应该可以工作:
Dim offset = New Date(1, 1, 1)
Dim dateOne = DateTimePicker1.Value
Dim dateTwo = DateTimePicker2.Value
Dim diff As TimeSpan = dateTwo - dateOne
Dim years = (offset + diff).Year - 1
Dim months = (dateTwo.Month - dateOne.Month) + 12 * (dateTwo.Year - dateOne.Year)
Dim days = diff.Days
TxtYear.Text = years.ToString
TxtMonth.Text = months.ToString
TxtDays.Text = days.ToString
【讨论】:
试试这个:
txtyrs.text=datediff(DateInterval.Year,datetimepicker1,datetimepicker2).ToString()
假设datetimepicker1 和datetimepicker2 的类型为DateTime。如果没有,您需要获取它们各自的 DateTime 值并使用它们。
【讨论】:
这样的事情应该可以工作:
Dim dateOne = DateTimePicker1.Value
Dim dateTwo = DateTimePicker2.Value
Dim diff As TimeSpan = dateTwo.Subtract(dateOne)
Dim years As Double = diff.TotalDays / 365
txtyrs.Text = years.ToString
txtmonsh.Text = (years * 12).ToString
txtdays.Text = diff.TotalDays.ToString
【讨论】:
感谢所有帮助过的人。
必须进行一些计算,然后,
dim ts as TimeSpan = dtpicker1.value - dtpicker.value
dim days, months, years as integer
months = 12*(dtp1.value.year - dtp2.value.year) (dtp1.value.month-dtp2.value.month)
...更多
【讨论】:
用途:
datediff(interval, date1, date2);
例如:interval可以是日、月、年、小时、秒分钟等。它从date2中减去date1。
在 Dateformat 中输入 date1 和 date2。
格式:DateDiff(DateInterval.Day, Now.Date, Now.AddDays(4).Date)
输出:4
【讨论】:
Dim D1 as Date = Now
Dim D2 as Date = D1.AddDays(10)
Dim difference As
TimeSpan = D2.Subtract(D1)
msgBox(“{0} Days”, difference.TotalDays) 'THIS WILL RETURN Total No. of Days
【讨论】:
我已经修改了您的代码,以便您可以轻松理解它。
试试这个:
txtyrs.text = DateDiff(DateInterval.Day, datetimepicker1.value,datetimepicker2.value)
我希望就是这样。如果有问题或仍然令人困惑,请告诉我。
【讨论】:
使用 DateDiff,您可以使用不同的日期间隔参数调用它以检索适当的值:
Dim D1, D2 As Date
D1 = Date.Now
D2 = #11/9/2004#
'DateDiff
Console.WriteLine("DateDiff")
Console.WriteLine()
Console.WriteLine("{0} Days", _
DateDiff(DateInterval.Day, D1, D2))
Console.WriteLine("{0} Hours", _
DateDiff(DateInterval.Hour, D1, D2))
Console.WriteLine("{0} Minutes", _
DateDiff(DateInterval.Minute, D1, D2))
Console.WriteLine("{0} Seconds", _
DateDiff(DateInterval.Second, D1, D2))
Console.WriteLine()
或者,可以通过从另一个日期中减去一个日期来检索 TimeSpan 结构,然后查询该结构的各个成员。
Console.WriteLine("TimeSpan")
Console.WriteLine()
Dim difference As TimeSpan = D2.Subtract(D1)
Console.WriteLine("{0} Days", difference.TotalDays)
Console.WriteLine("{0} Hours", difference.TotalHours)
Console.WriteLine("{0} Minutes", difference.TotalMinutes)
Console.WriteLine("{0} Seconds", difference.TotalSeconds)
Console.WriteLine()
两种不同方法的输出几乎相同,只是 TimeSpan 属性返回 Doubles,而 DateDiff 始终返回 Longs (Int64)。
日期差异
175 天
4222 小时
253345 分钟
15200730 秒
时间跨度
175.934383644387 天
4222.42520746528 小时
253345.512447917 分钟
15200730.746875 秒
【讨论】:
我用可选的 EndDate 创建了这个函数,默认是当前的。我已经在时间中添加了归零功能。
Public Shared Function Zero(ByVal Number As Integer) As String
If Number < 10 Then
Return "0" & Number.ToString
Else
Return Number.ToString
End If
End Function
Public Shared Function TimeDifference(ByVal StartDate As DateTime, Optional ByVal EndDate As DateTime = Nothing) As String
If EndDate = Nothing Then
EndDate = Date.Now()
End If
Dim timediff As TimeSpan
If EndDate > StartDate Then
timediff = EndDate - StartDate
Return timediff.Days & ":" & Zero(timediff.Hours) & ":" & Zero(timediff.Minutes) & ":" & Zero(timediff.Seconds)
Else
timediff = StartDate - EndDate
Return timediff.Days & ":" & Zero(timediff.Hours) & ":" & Zero(timediff.Minutes) & ":" & Zero(timediff.Seconds)
End If
End Function
【讨论】: