Есть ли простой способ рассчитать даты по критериям с NSCalendar
и/или NSCalendarComponents
? Некоторое время я смотрел документацию, но это немного сложно. Например, мне нужно «Среда 6:00 вечера» для следующих 15 четных недель (включая эту, если она даже пронумерована, а не за эту дату/время.)Расчет некоторых NSDates из дней недели/недель лет
-2
A
ответ
0
В итоге я ответил на свой вопрос. Это очень просто, когда вы знаете, что -[NSCalendar dateBySettingUnit:value:ofDate:options:]
автоматически увеличивает шаг вперед до следующей подходящей даты.
NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierISO8601];
NSDate *date = [NSDate date];
// find the next Wednesday 6 o'clock
date = [calendar dateBySettingUnit:NSCalendarUnitSecond value:0 ofDate:date options:0];
date = [calendar dateBySettingUnit:NSCalendarUnitMinute value:0 ofDate:date options:0];
date = [calendar dateBySettingUnit:NSCalendarUnitHour value:18 ofDate:date options:0];
date = [calendar dateBySettingUnit:NSCalendarUnitWeekday value:4 ofDate:date options:0];
// skip one week if it's not an even week
NSDateComponents *components = [calendar components:NSCalendarUnitWeekOfYear fromDate:date];
date = [calendar dateByAddingUnit:NSCalendarUnitWeekOfYear value:components.weekOfYear % 2 toDate:date options:0];
// 15 weeks of this
for (int i = 0; i < 15; i++)
{
NSDate *testDate = [calendar dateByAddingUnit:NSCalendarUnitWeekOfYear value:i * 2 toDate:date options:0];
NSLog(@"Date: %@", testDate);
}
0
Вот способ определения того, Среда, чтобы начать с, а затем получить следующие 14 ровных недель. Это не учитывает временную часть вашего вопроса, но вы можете использовать аналогичные методы для обработки времени.
+ (NSArray *)nextFifteenEvenNumberedWeekWednesdays:(NSDate *)startingDate
{
static const NSInteger Wednesday = 4;
static const NSInteger OneDay = 60 * 60 * 24;
NSCalendar *calender = [NSCalendar currentCalendar];
NSDateComponents *startingDateComponents = [calender components:(NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitWeekday | NSCalendarUnitWeekOfYear)
fromDate:startingDate];
// Go to the closest Wednesday
NSInteger daysToWednesday = Wednesday - startingDateComponents.weekday;
if (startingDateComponents.weekday > Wednesday) {
// We already passed wednesday, so go to the next wednesday
if (startingDateComponents.weekOfYear % 2 == 0) {
// If this date is past Wednesday but is on an even week, then moving to the next wednesday
// will be an odd week. So skip forward one week.
startingDate = [startingDate dateByAddingTimeInterval:7 * OneDay];
}
daysToWednesday = 7 + daysToWednesday; // get the next Wednesday
}
startingDate = [startingDate dateByAddingTimeInterval:daysToWednesday * OneDay]; // Move to wednesday
NSMutableArray *wednesdays = [NSMutableArray array];
for (NSInteger i = 0; i < 15; i++) {
// Add every other wednesday
[wednesdays addObject:[startingDate dateByAddingTimeInterval:14 * i * OneDay]];
}
return [wednesdays copy];
}
Смежные вопросы
- 1. расчет лет, месяцев, дней
- 2. Расчет лет, месяцев, дней в оракуле
- 3. Tableau: Расчет ежемесячный и среднегодовой из дней
- 4. Вычитание дней или лет из нового java.text.SimpleDateFormat
- 5. конвертировать количество дней в лет, месяцев, дней
- 6. Конвертировать количество дней в лет, месяцев, дней
- 7. Количество выходных дней между двумя NSDates
- 8. Сколько дней в течение нескольких лет
- 9. D3 Формат дней до лет
- 10. Количество лет, месяцев и дней
- 11. Расчет лет между високосным годом
- 12. Расчет возраста лет в SQL
- 13. Расчет дельта лет от даты
- 14. Расчет дней месяца
- 15. Расчет дней в Ruby
- 16. Расчет количества стационарных дней
- 17. Расчет недельных дней Java
- 18. Расчет% дней VB.NET
- 19. расчет даты -10 дней
- 20. php Расчет оставшихся дней из базы данных
- 21. Расчет текущих дней подряд из таблицы
- 22. сортировке NSArray из NSDates
- 23. Расчет молекулярных формул из массы некоторых элементов
- 24. Выдача лет и дней в dataframe
- 25. Расчет дней терапии в sql-запросе
- 26. Как конвертировать число дней в несколько лет, месяцев, дней?
- 27. Расчет дней с BC bash
- 28. Расчет дней с часов TimeSpan
- 29. Матч дней, месяцев и лет на строке
- 30. Вычитание дней/месяцев/лет с объекта даты
Я придумал что-то еще, прежде чем увидел это. По-видимому, 'dateBySettingUnit' будет продвигаться к следующей дате, чтобы автоматически удовлетворить это изменение, поэтому нет, если нужны предложения или математические операции. –