Как добавить временной интервал к NSDate?

Я имею NSDate и продолжительность. Я должен получить время после продолжительности

Данный:
Дата "24.02.2010 12:30:00 - 1000"
продолжительность является 3600 secs

Я должен добраться "24.02.2010 13:30:00 - 1000"

Я думал dateWithTimeIntervalSinceReferenceDate:, добился бы цели, но я вижу теперь, когда это дает смещению даты с 1 января 20:01 GMT.

Есть ли другая функция C, которую я должен использовать

6
задан jscs 30 September 2015 в 19:48
поделиться

3 ответа

Как заявляет DyingCactus, вы можете использовать метод addTimeInterval NSDate, но в зависимости от версии ОС он создаст предупреждение компилятора, поскольку он устарел в версии 10.6 с 17 августа 2009 года.

Текущий рекомендуемый метод - использовать dateByAddingTimeInterval для NSDate:

NSDate *newDate = [oldDate dateByAddingTimeInterval:3600];

Обратите внимание, что если вы ориентируетесь на 10.5 или более раннюю версию, исходный ответ будет работать.

32
ответ дан 8 December 2019 в 02:19
поделиться

Если вы хотите использовать время GMT, вы можете использовать gmtstrftime () , которое даст вам системное время, но как в GMT. Дополнительные сведения см. по адресу http://us2.php.net/gmstrftime .

-121--3941884-

У меня была аналогичная проблема с пользовательским визуалом.

Решение состояло в том, чтобы отложить проблемную задачу через Dispatcher (отложенное выполнение с фоновым приоритетом в данном случае)...

public void MyProblematicDisplayMethod(Symbol TargetSymbol)
{
    this.HostingScrollViewer.BringIntoView(TargetSymbol.HeadingContentArea);
    ...
    // This post-call is needed due to WPF tricky rendering precedence (or whatever it is!).
    this.HostingScrollViewer.PostCall(
        (scrollviewer) =>
        {
            // in this case the "scrollviewer" lambda parameter is not needed
            var Location = TargetSymbol.Graphic.PointToScreen(new Point(TargetSymbol.HeadingContentArea.Left, TargetSymbol.HeadingContentArea.Top));
            ShowOnTop(this.EditBox, Location);
            this.EditBox.SelectAll();
        });
     ...
}

/// <summary>
/// Calls, for this Source object thread-dispatcher, the supplied operation with background priority (plus passing the source to the operation).
/// </summary>
public static void PostCall<TSource>(this TSource Source, Action<TSource> Operation) where TSource : DispatcherObject
{
    Source.Dispatcher.BeginInvoke(DispatcherPriority.Background,
        new DispatcherOperationCallback(delegate(Object state)
                                        { Operation(Source); return null; }),
        null);
}

Я использовал этот PostCall в других ситуациях рендеринга, связанных с ScrollViewer.

-121--2447925-

Можно использовать метод экземпляра addTimeInterval NSDate:

NSDate *newDate = [oldDate addTimeInterval:3600];

Edit: Как правильно указывает Chip Coons, этот метод устарел. Вместо этого используйте один из других методов.

3
ответ дан 8 December 2019 в 02:19
поделиться

Вам нужен метод класса dateWithTimeInterval: SinceDate: , который принимает дату начала и интервал NSDate docs

4
ответ дан 8 December 2019 в 02:19
поделиться