获取两个日期之间的日历日期

时间:2017-03-02 16:30:06

标签: .net vb.net date datediff

DateDiff函数会在24小时内报告日间隔,这会在询问天数发生变化时发生了多少天时提供了奇怪的结果。

例如,如果我想获得自昨天下午以来的天数,如果它没有完整的24小时,DateDiff将返回0,而大多数时候我会问这个问题,我预计昨天将被视为1天前,无论时间戳如何。

有没有办法让DateDiff返回日历天数?

Demo in .NET Fiddle

Dim date1 As DateTime = #3/1/2017 5:00 PM#
Dim date2 As DateTime = #3/2/2017 10:00 AM#

Dim daysAgo = DateDiff(DateInterval.Day, date1, date2)
Dim msg = String.Format("Last date was {0} day(s) ago on {1}. ", daysAgo, date1.ToShortDateString())
Console.WriteLine(msg) ' Last date was 0 day(s) ago on 3/1/2017. 

关于StackOverflow的以下问题没有解决这个问题:

2 个答案:

答案 0 :(得分:5)

您不需要字符串操作来获取没有时间部分的DateTime,只需使用DateTime.Date

要获得两个日期之间的时间跨度,只需从另一个日期中减去一个。从另一个日期中减去一个日期会返回一个TimeSpan对象,其Days属性是完整日期的差异。

您需要做的就是:

Dim days As Integer =(date2.Date-date1.Date).Days 

这样就可以避免生成和解析临时字符串。

答案 1 :(得分:0)

您可以使用DateTime.Date删除时间组件,并比较整个数字日期,如下所示:

Demo in .NET Fiddle

Dim date1 As DateTime = #3/1/2017 5:00 PM#
Dim date2 As DateTime = #3/2/2017 10:00 AM#

Dim daysAgo = DateDiff(DateInterval.Day, date1.Date, date2.Date)
Dim msg = String.Format("Last date was {0} day(s) ago on {1}. ", daysAgo, date1.ToShortDateString())
Console.WriteLine(msg) ' Last date was 1 day(s) ago on 3/1/2017.