Как преобразовать значение Double в значение Date в Objective-C - PullRequest
0 голосов
/ 03 августа 2011

Мне нужно преобразовать значение Double в значение Date в Objective-C. Я пробовал много способов, но я не понимаю его.24 и сохраняется как Дата в переменную дату.Как я могу сделать это, используя Objective-C?

Я создал переменную даты следующим образом:

NSDate *date=[[NSDate alloc]init];
date=(nsdate)var1/24;

Как я могу это сделать?

Ответы [ 2 ]

1 голос
/ 03 августа 2011

Это двойная переменная .. которая будет содержать значения до 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:, но это для случаев, когда вы имеете дело с абсолютными интервалами и не относительными суммами.
0 голосов
/ 03 августа 2011

Это зависит от того, что именно вы хотите сделать, но прямое приведение как (nsdate)var1/24 определенно НЕ сработает !!!

Кстати, что именно представляет ваша переменная var1? Минут? Секунды? Часы? С какой контрольной даты? Сегодня? Эпоха UNIX? Это метка времени UNIX (секунды с 01.01.1970)? Просто попросить «преобразовать число в дату» само по себе ничего не значит; -)

В зависимости от ответа на эти вопросы вы можете использовать NSDateComponents для создания даты, дающей различные компоненты даты (месяц, день, часы, минуты, секунды и т. Д.), Или создать NSDate из метки времени UNIX с использованием dateWithTimeIntervalSince1970. .. или используйте любой другой метод из NSDate или NSDateComponents в зависимости от ваших потребностей.

Какова бы ни была ваша проблема, прочитайте * Руководство по программированию даты и времени !! Все объясняется здесь о манипуляциях с датами; он будет содержать все необходимое для ответа на ваш вопрос.

...