Это двойная переменная .. которая будет содержать значения до 24, она будет представлять ЧАСЫ СЕГОДНЯ ..
ОК, поэтому у вас есть относительное значение, которое вы хотите добавить к абсолютному значению. Требуется дополнительная работа.
Во-первых, вы должны решить, что сегодня? Это 0:01 утра? Если это так, в каком часовом поясе? ВРЕМЯ ПО ГРИНВИЧУ? Что-то другое? Вы должны знать это, потому что 12:01 утра по Гринвичу - это не то же самое, что 12:01 утра по восточному поясному времени. Итак: что сегодня?
Как только вы определились, где вы будете измерять время из , вы должны построить NSDate
, представляющий этот момент времени.
Например:
NSDate *rightNow = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSUIntegerMax fromDate:rightNow];
Это даст вам объект NSDateComponents
, который представляет собой объект, представляющий момент времени относительно календаря . В этом случае мы используем «текущий календарь» (вероятно, григорианский календарь, но не обязательно), а часовой пояс по умолчанию - ваш текущий часовой пояс. Если вам нужно, чтобы он был относительно другого часового пояса, вы можете создать новый объект NSTimeZone
и использовать -[NSCalendar setTimeZone:]
для установки часового пояса календаря (перед запросом компонентов даты).
Теперь, когда у вас есть компоненты даты, мы можем «сбросить» вещи до нужного времени:
[components setHour:0];
[components setMinute:0];
[components setSecond:0];
Затем мы можем превратить его в NSDate
, чтобы сделать его абсолютным моментом времени:
NSDate *startingPoint = [calendar dateFromComponents:components];
СЕЙЧАС у нас есть отправная точка, и мы можем справиться с «часами с сегодняшнего дня». Во-первых, мы создадим объект компонентов даты, который будет представлять сколько часов разницы:
NSInteger hourDelta = var1 / 24;
NSDateComponents *delta = [[NSDateComponents alloc] init];
[delta setHour:hourDelta];
Теперь мы добавим эту относительную разницу к нашей абсолютной дате начала:
NSDate *finalDate = [calendar dateByAddingComponents:delta toDate:startingPoint options:0];
И поскольку мы хорошие граждане, мы очистим нашу память (если вы не используете сборщик мусора или не компилируете с ARC):
[delta release];
Некоторые важные заметки:
- Все манипуляции выполняются с помощью объекта
NSCalendar
, потому что NSCalendar
определяет, что означает «день» и что такое «час». Вы думаете, что «24 часа в день и 60 минут в час ...», но это не обязательно так. Я могу создать свой собственный календарь, который имеет 10 часов в день и 10 минут в час. Если я хочу, я могу определить «день» как нечто иное, чем «один полный оборот Земли». NSCalendar
определяет все эти правила. Таким образом, все относительные манипуляции с датами (добавление «часов» и «дней» или чего-либо еще) должны выполняться через календарь.
- Существуют методы для
NSDate
, такие как -dateByAddingTimeInterval:
, но это для случаев, когда вы имеете дело с абсолютными интервалами и не относительными суммами.