这应该很简单!
我有一家商店,营业时间为8:30,营业时间为17:00。我希望我的应用程序说明当前开放或当前关闭的商店。
存储open_time和close_time的最佳方法是什么?自一天开始以秒为单位存储它们,即30600和63000?
这是有道理的,但是我现在如何在今天开始的几秒钟内得到当前时间,所以我可以检查current_time是否在open_time和close_time之间,即打开!!
提前致谢!
答案 0 :(得分:2)
这个问题并不像你想象的那么简单。你必须非常仔细地处理日期。最佳解决方案是将所有打开和关闭时间存储为日期。以下是一些用于创建打开/关闭时间并进行比较的代码:
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
和NSDateComponents
。查看this answer了解它为何如此重要。
答案 1 :(得分:1)
我认为更清晰的解决方案是使用仅存在小时/分钟组件的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比我快一点,我们建议采用相同的方法。
答案 2 :(得分:0)
你可以这样做。
NSDate *today = // code for getting today date at 0 oclock
NSDate *now = [NSDate date];
double second = [now timeIntervalSinceDate:today];
现在你从比赛开始就有时间进行比较。