这应该很简单!
我有一家店,8:30开门,17:00关门。我希望我的应用程序显示当前营业或关闭的商店。
存储我的 open_time 和 close_time 的最佳方式是什么?将它们存储为自一天开始以来的秒数,即 30600 和 63000?
这是有道理的,但是我现在如何获取当前时间,从今天开始以秒为单位,所以我可以检查 current_time 是否在 open_time 和 close_time 之间,即打开!
提前致谢!
这应该很简单!
我有一家店,8:30开门,17:00关门。我希望我的应用程序显示当前营业或关闭的商店。
存储我的 open_time 和 close_time 的最佳方式是什么?将它们存储为自一天开始以来的秒数,即 30600 和 63000?
这是有道理的,但是我现在如何获取当前时间,从今天开始以秒为单位,所以我可以检查 current_time 是否在 open_time 和 close_time 之间,即打开!
提前致谢!
这个问题并不像你想象的那么简单。你必须非常小心地处理日期。最好的解决方案是将所有打开和关闭时间存储为日期。以下是一些用于创建打开/关闭时间并进行比较的代码:
NSDate * now = [NSDate date];
NSCalendar * calendar = [NSCalendar currentCalendar];
NSDateComponents * comps = [calendar components:~(NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:now];
[comps setHour:8];
[comps setMinute:30];
NSDate * open = [calendar dateFromComponents:comps];
[comps setHour:17];
[comps setMinute:0];
NSDate * close = [calendar dateFromComponents:comps];
if ([now compare:open] == NSOrderedDescending && [now compare:close] == NSOrderedAscending) {
// The date is within the shop's hours.
}
else {
// The date is not within the shop's hours.
}
这是我所做的:
获取当前日期。
获取日期的组成部分,小时、分钟和秒除外。
设置小时和分钟。
创建一个开放时间。
重复步骤 3-4 关闭时间。
比较现在的开放和关闭时间。
如果您需要对日期进行任何修改,则应始终使用NSCalendar
and NSDateComponents
。查看这个答案,了解为什么它如此重要。
我认为更清晰的解决方案是使用仅存在小时/分钟组件的 NSDate 对象。
基本上,您需要在应用程序的某个位置存储商店的开/关时间,如下所示:
NSCalendar *calendar = [[NSCalendar alloc]
initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *openTime = [[NSDateComponents alloc] init];
[openTime setHour: 12];
[openTime setMinute: 30];
NSDate *openDate = [calendar dateFromComponents: openTime];
[calendar release];
如果您需要查看当前时间是否在两个这样的 NSDate 对象之间,您可以使用如下方法:
- (BOOL)currentTimeIsInBetween: (NSDate *)date1 andDate: (NSDate *)date2 {
NSCalendar *calendar = [[NSCalendar alloc]
initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents *currentComponents = [calendar components:
(NSMinuteCalendarUnit | NSHourCalendarUnit)
fromDate: [NSDate date]];
NSDate *currentAdjusted = [calendar dateFromComponents: currentComponents];
[calendar release];
if ([currentAdjusted compare: date1] == NSOrderedAscending)
return NO;
if ([currentAdjusted compare: date2] == NSOrderedDescending)
return NO;
return YES;
}
编辑:似乎用户 rbrown 比我快一点,我们建议使用相同的方法。
你可以做这样的事情。
NSDate *today = // code for getting today date at 0 oclock
NSDate *now = [NSDate date];
double second = [now timeIntervalSinceDate:today];
现在,您从一天开始就有时间进行比较。