我想要创建一个时间数组,并通过它们排序来查找数组中下一个最接近的时间(如果它经过一段时间,那么它将选择下一个最接近的时间)。我怎样才能做到这一点?我不希望它指定年,月或日。我只想过滤一天中的时间(小时,分钟,秒)。我想在NSArray
的下一次获得多少秒。我已经看过NSDate
,并注意到有一个timeIntervalSinceDate
方法,但我不知道如何创建NSDate
对象来进行比较。如何创建特定时间的数组?
-5
A
回答
0
NSDate * date = [NSDate date];
NSArray * array = @[];
NSUInteger index =
[array indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
return ![[((NSDate *)obj) earlierDate:date] isEqualToDate:date];
}];
NSDate * refDate = nil;
if (index != NSNotFound)
refDate = array[index];
0
另一张海报给了你一个使用NSDates的解决方案。 NSDates是指定时间(包括年,月,日,小时,分钟,秒和秒的小数部分)的对象。
如果要使用仅反映小时/分钟/秒的时间,我建议你只使用基于秒/天的整数运算:
NSUInteger totalSeconds = hours * 60 * 60 + minutes * 60 seconds;
然后,您可以创建持有分秒必争一个NSNumber的NSArray的值,并根据需要操纵它们。
你可以写信给时/分/秒值转换为一个NSNumber的方法:
- (NSNumber *) numberWithHour: (NSUInteger) hour
minute: (NSUInteger) minute
second: (NSUInteger) second;
{
return @(hour*60*60 + minute*60 second);
}
,然后使用该方法来创建NSNumbers
数组NSMutableArray *timesArray = [NSMutableArray new];
[timesArray addObject: [self numberWithHour: 7 minute: 30 second: 0]];
[timesArray addObject: [self numberWithHour: 9 minute: 23 second: 17]];
[timesArray addObject: [self numberWithHour: 12 minute: 3 second: 52]];
[timesArray addObject: [self numberWithHour: 23 minute: 53 second: 59]];
};
要获取小时/分钟/秒,您可以使用NSDate,NSCalendar和NSDateComponents:
NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier: NSGregorianCalendar];
NSDateComponents comps =
[calendar components: NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit
fromDate: now];
int hour = [components hour];
int minute = [components minute];
int second = [components second];
unsigned long nowTotalSeconds = hours * 60 * 60 + minutes * 60 seconds;
一旦您计算了今天的总秒数,您可以遍历您的时间值数组,并使用NSArray方法找到未来的未来时间indexOfObjectPassingTest
NSUInteger futureTimeIndex = [timesArray indexOfObjectPassingTest:
^BOOL(NSNumber *obj, NSUInteger idx, BOOL *stop)
{
if (obj.unsignedIntegerValue > nowTotalSeconds)
return idx;
}
if (futureTimeIndex != NSNotFound)
NSInteger secondsUntilNextTime =
timesArray[futureTimeIndex].unsignedIntegerValue - nowTotalSeconds;
相关问题
- 1. 如何使用moment.js创建特定时区中的时间
- 2. 如何为特定组创建DirectoryEntry
- 3. Rails:如何在特定时区创建时间对象
- 4. 如何在特定时区将时间创建为零?
- 5. 如何创建在特定时间复位的倒计时时间
- 6. 如何在基于特定函数的matlab中创建数组
- 7. 如何查找早于特定时间创建的Rails模型?
- 8. 创建特定的多维数组
- 9. 用特定时间创建NSDate
- 10. 创建特定时间线程
- 11. 如何从字符串中创建特定的数组php
- 12. 如何用字典中的特定项目创建数组?
- 13. 如何从数组的特定值创建向量?
- 14. 如何创建特定对象的数组?
- 15. 如何使用np.where()创建新的特定行数组?
- 16. 如何在特定时间在libgdx创建敌人
- 17. 如何在特定的时间段内在特定的时间内为用户创建活动表格javascript
- 18. 如何降低时间戳的数组元素的个数计数的数组中的特定时间范围
- 19. 如何在发生特定字符串时创建新数组? numpy的
- 20. 使用特定时间创建日期时间mySql
- 21. 如何在ruby hash中为特定键创建值数组?
- 22. 想从数组中创建特定的属性值数组
- 23. 使用对象数组的特定属性创建数组
- 24. 从包含特定字符串的数组创建数组
- 25. 创建数组编译时间?
- 26. 从两个数组创建时间
- 27. 如何使用Django的`authenticate()`为特定的组创建特定的登录?
- 28. 如何从时间点为numpy数组创建掩码?
- 29. 如何创建倒数计时器到特定日期?
- 30. 如何计算数组列表中特定时间间隔的平均值?