Я имею NSDate
и продолжительность. Я должен получить время после продолжительности
Данный:
Дата "24.02.2010 12:30:00 - 1000"
продолжительность является 3600 secs
Я должен добраться "24.02.2010 13:30:00 - 1000"
Я думал dateWithTimeIntervalSinceReferenceDate:
, добился бы цели, но я вижу теперь, когда это дает смещению даты с 1 января 20:01 GMT.
Есть ли другая функция C, которую я должен использовать
Как заявляет DyingCactus, вы можете использовать метод addTimeInterval NSDate, но в зависимости от версии ОС он создаст предупреждение компилятора, поскольку он устарел в версии 10.6 с 17 августа 2009 года.
Текущий рекомендуемый метод - использовать dateByAddingTimeInterval для NSDate:
NSDate *newDate = [oldDate dateByAddingTimeInterval:3600];
Обратите внимание, что если вы ориентируетесь на 10.5 или более раннюю версию, исходный ответ будет работать.
Если вы хотите использовать время GMT, вы можете использовать gmtstrftime ()
, которое даст вам системное время, но как в GMT. Дополнительные сведения см. по адресу http://us2.php.net/gmstrftime .
У меня была аналогичная проблема с пользовательским визуалом.
Решение состояло в том, чтобы отложить проблемную задачу через 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, этот метод устарел. Вместо этого используйте один из других методов.
Вам нужен метод класса dateWithTimeInterval: SinceDate:
, который принимает дату начала и интервал NSDate docs