结束一天约会的巧妙方法?

KML*_*KML 2 nscalendar nstimeinterval ios

我在数据库中查询startDate和endDate之间的值.因此,我正在寻找一种巧妙的方式来获得NSDate以结束一天的约会.就像你可以获得startOfDayForDate()一样.

我想你可以这样做:

let cal = NSCalendar.currentCalendar()
let startOfDay = cal.startOfDayForDate(NSDate())
let aDay:NSTimeInterval = 60*60*23 + 60*59 + 59
let endofDay = startOfDay.dateByAddingTimeInterval(aDay)
Run Code Online (Sandbox Code Playgroud)

将component.day + 1添加到startOfDayForDate是获取日期"当天结束"的正确方法,还是有更好的方法?

Mat*_*uch 8

更好的方法是获取第二天的开始并减去0.00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001秒.

你知道我想说什么吗?定义一天的结束非常困难.23:59肯定不是一天的结束,差不多整整一分钟,直到第二天.甚至23:59:59也不是一天的结束.因为在这个时间和第二天的开始之间存在无限的分数秒.据我所知,NSDate支持纳秒开箱即用,因此在目前的实施中,在23:59:59和第二天之间至少有1 000 000 000 NSD.

这就是为什么你应该看看你是否能找到一种方法来使用第二天的开始.

例如,而不是if (startOfDay <= date && date <= endOfDay)你可以使用if (startOfDay <= date && date < startOfNextDay).

要计算第二天的开始,您必须使用NSCalendar.在iOS8中,Apple添加了一些很好的方法来简化这些计算:

let calendar = NSCalendar.currentCalendar()
let startOfDay = calendar.startOfDayForDate(NSDate())
let startOfNextDay = calendar.dateByAddingUnit(.CalendarUnitDay, value: 1, toDate: startOfDay, options: nil)!
Run Code Online (Sandbox Code Playgroud)

编辑:由于您现在声明要查询数据库,因此无需查找当天结束.检查日期是在当天开始时或之后,以及在第二天开始之前.

  • 其实并不傻。我试图计算前一天的结束时间。根据经验,我可以说它不太好用。;) 使用 `&lt; startOfNextDay` 代替 `&lt;= endOfCurrentDay` 效果很好。 (2认同)