DateDiff
函数会在24小时内报告日间隔,这会在询问天数发生变化时发生了多少天时提供了奇怪的结果。
例如,如果我想获得自昨天下午以来的天数,如果它没有完整的24小时,DateDiff将返回0
,而大多数时候我会问这个问题,我预计昨天将被视为1天前,无论时间戳如何。
有没有办法让DateDiff返回日历天数?
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的以下问题没有解决这个问题:
答案 0 :(得分:5)
您不需要字符串操作来获取没有时间部分的DateTime,只需使用DateTime.Date。
要获得两个日期之间的时间跨度,只需从另一个日期中减去一个。从另一个日期中减去一个日期会返回一个TimeSpan对象,其Days属性是完整日期的差异。
您需要做的就是:
Dim days As Integer =(date2.Date-date1.Date).Days
这样就可以避免生成和解析临时字符串。
答案 1 :(得分:0)
您可以使用DateTime.Date
删除时间组件,并比较整个数字日期,如下所示:
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.