Как я получаю текущую дату в Какао

Супер просто и работает, но не уверен почему ....

angular.module('testing')
  .directive('details', function () {
        return {
              templateUrl: 'components/details.template.html',
              restrict: 'E',                 
              controller: function ($scope) {
                    $scope.details=$scope.details;  <=== can see the parent details doing this                     
              }
        };
  });
58
задан Quinn Taylor 1 July 2009 в 21:26
поделиться

10 ответов

Вы должны использовать следующее:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [gregorian components:(NSHourCalendarUnit  | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:yourDateHere];
NSInteger hour = [dateComponents hour];
NSInteger minute = [dateComponents minute];
NSInteger second = [dateComponents second];
[gregorian release];

Нет никакой разницы между NSDate * now и NSDate * now, это просто вопрос предпочтений. С точки зрения компилятора ничего не меняется.

48
ответ дан 24 November 2019 в 18:43
поделиться

Кроме того, я заметил в разных местах и ​​в разное время звездочку ( * ) располагается либо сразу после времени NSDate * now , либо прямо перед переменной NSDate * now . В чем разница между ними и почему вы должны использовать один по сравнению с другим?

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

int* a, b;

Что такое тип b ?

Если вы угадали int * , вы ошибаетесь. Это просто int .

Другой способ делает это немного яснее, сохраняя * рядом с переменной, которой он принадлежит:

int *a, b;

Конечно, есть два способа, которые еще более ясны:

int b, *a;

int *a;
int b;
4
ответ дан 24 November 2019 в 18:43
поделиться

Вам нужно сделать что-то вроде следующего:

NSDate *now = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSHourCalendarUnit fromDate:now];
NSLog(@"%d", [components hour]);

И так далее.

3
ответ дан 24 November 2019 в 18:43
поделиться

NSDate * now и NSDate * now - это одно и то же: указатель на объект NSDate.

Вы, вероятно, захотите использовать descriptionWithCalendarFormat : timeZone: locale: , а не dateWithCalendarFormat: - последний возвращает NSCalendarDate, который, как говорится в документах, в какой-то момент будет устарел.

1
ответ дан 24 November 2019 в 18:43
поделиться

Вы также можете использовать:


CFGregorianDate currentDate = CFAbsoluteTimeGetGregorianDate(CFAbsoluteTimeGetCurrent(), CFTimeZoneCopySystem());
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02.0f", currentDate.hour, currentDate.minute, currentDate.second];
CFRelease(currentDate); // Don't forget this! VERY important

Я думаю, это имеет следующие преимущества:

  1. Нет прямого выделения памяти.
  2. Секунды - это двойное, а не целое число.
  3. Нет вызовы сообщений.
  4. Быстрее.
21
ответ дан 24 November 2019 в 18:43
поделиться

Другой способ:

NSDate *now = [NSDate date];

//maybe not 100% approved, but it works in English.  You could localize if necessary
NSDate *midnight = [NSDate dateWithNaturalLanguageString:@"midnight tomorrow"]; 

//num of seconds between mid and now
NSTimeInterval timeInt = [midnight timeIntervalSinceDate:now];
int hours = (int) timeInt/3600;
int minutes = ((int) timeInt % 3600) / 60;
int seconds = (int) timeInt % 60;

Вы теряете субсекундную точность из-за преобразования NSTimeInterval в int, но это не имеет значения.

1
ответ дан 24 November 2019 в 18:43
поделиться

Нет разницы в расположении звездочки (в C, на котором основан Obj-C, не имеет значения). Это чисто предпочтение (стиль).

0
ответ дан 24 November 2019 в 18:43
поделиться

Мне потребовалось некоторое время, чтобы определить, почему пример приложения работает, а мое - нет.

Библиотека (Foundation.Framework), на которую ссылается автор, является системной библиотекой (из ОС ), где iphone sdk (я использую 3.0) больше не поддерживается.

Поэтому пример приложения (с about.com, http://www.appsamuck.com/day1.html ) работает, а наш - нет.

0
ответ дан 24 November 2019 в 18:43
поделиться

Замените это:

NSDate* now = [NSDate date];
int hour = 23 - [[now dateWithCalendarFormat:nil timeZone:nil] hourOfDay];
int min = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] minuteOfHour];
int sec = 59 - [[now dateWithCalendarFormat:nil timeZone:nil] secondOfMinute];
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, min,sec];

На это:

NSDate* now = [NSDate date];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *dateComponents = [gregorian components:(NSHourCalendarUnit  | NSMinuteCalendarUnit | NSSecondCalendarUnit) fromDate:now];
NSInteger hour = [dateComponents hour];
NSInteger minute = [dateComponents minute];
NSInteger second = [dateComponents second];
[gregorian release];
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%02d", hour, minute, second];
5
ответ дан 24 November 2019 в 18:43
поделиться
CFGregorianDate currentDate = CFAbsoluteTimeGetGregorianDate(CFAbsoluteTimeGetCurrent(), CFTimeZoneCopySystem());
countdownLabel.text = [NSString stringWithFormat:@"%02d:%02d:%2.0f", currentDate.hour, currentDate.minute, currentDate.second];

Марк был прав этот код НАМНОГО эффективнее для управления датами часов мин и сек. Но он забыл @ в начале объявления строки форматирования.

0
ответ дан 24 November 2019 в 18:43
поделиться