Расчет времени до определенного момента времени в iOS - PullRequest
0 голосов
/ 18 апреля 2011

Я хочу знать разницу в секундах между сегодняшним днем ​​и, скажем, следующей средой, 14:00.

Я обнаружил, что [NSDate date]; дает мне текущее время и дату, и что NSTimeInterval обычно используется для этой цели (и я хотел бы использовать этот интервал где-нибудь еще, а где-то еще требуется NSTimeInterval ), поэтому код будет выглядеть так:

NSDate *now = [NSDate date];
NSDate *nextWednesday = ???;
// profit
NSTimeInterval secondsUntilNextWednesday = [nextWednesday timeIntervalSinceDate:now];

Но как мне узнать дату следующей среды?

Edit2: я вроде улучшил метод, мне все еще почти не нравится, но это огромное улучшение. Кроме того, это намного больше напоминает мою псевдо-попытку.

- (NSTimeInterval)secondsUntilNextWednesday
{
    NSCalendar *calendar = [NSCalendar currentCalendar];

    NSDate *today = [NSDate date];
    NSDateComponents *components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate: today];
    // 17 == 15:00, seemingly. (timezones)
    [components setHour:17];
    [components setWeekday:4];
    NSDate *wednesday = [calendar dateFromComponents:components];
    NSTimeInterval secondsToWednesday = [wednesday timeIntervalSinceDate:today];
    // if secondsToWednesday is negative, it has already been wednesday, 15:00 (or 16:00 depending on DST)
    if (secondsToWednesday < 0)
    {
        secondsToWednesday += 604800;
    }
    return secondsToWednesday;
}

1 Ответ

1 голос
/ 18 апреля 2011

Apple предоставляет удобное руководство со всем, что вам нужно знать о датах: Руководство по программированию даты и времени

Возможно, вы захотите взглянуть на классы NSDateComponents и NSCalendar.

См. Календари, Компоненты даты и Единицы календаря> Создание даты из компонентов в руководстве для примера создания даты на основе различных известных компонентов даты.

В руководстве также показано, как рассчитать на основе компонентов даты, чтобы, например, перейти к следующей среде относительно текущей даты.

...