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的以下问题无法解决这一细微差别:
  • Get date difference in VB.NET
  • Calculating Number of Months between 2 dates
  • How to find the number of days between two dates / DateTimePickers
  • 最佳答案

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

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

    您需要做的只是:

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

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

    10-05 20:48
    查看更多