Как вы вычисляете день года на определенную дату в Objective-C?

Это то, что я обнаружил, что трачу часы, чтобы понять, и поэтому хочу поделиться с вами.

Вопрос: как определить день года на конкретную дату?

например, 15 января – 15-й день, а 31 декабря – 365-й день, когда это не високосный год.

Попробуй это:

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSUInteger dayOfYear = [gregorian ordinalityOfUnit:NSDayCalendarUnit inUnit:NSYearCalendarUnit forDate:[NSDate date]]; [gregorian release]; return dayOfYear; 

где date – это дата, в которую вы хотите определить день года. Документация по методу NSCalendar.ordinalityOfUnit приведена здесь .

Поэтому решение, которое я придумал, довольно аккуратно и просто и не сложно.

 NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"D"]; NSUInteger dayOfYear = [[formatter stringFromDate:[NSDate date]] intValue]; [formatter release]; return dayOfYear; 

Трюк, который я потратил так долго, чтобы понять, это использовать NSDateFormatter. «D» – это флаг для дня года.

Надеюсь, что это было полезно для вас, у кого такая же проблема, как у меня.

Используя ARC и заменяя устаревшие символы, ответ Джона Фэминеллы будет выглядеть так:

 NSCalendar *greg = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian]; NSUInteger dayOfYear= [greg ordinalityOfUnit:NSCalendarUnitDay inUnit:NSCalendarUnitYear forDate:[NSDate date]]; 

С classом NSDate . Использовать время сообщенияIntervalSinceDate. Он вернет вам значение NSTimeInterval (фактически это двойное число), которое представляет секунды, прошедшие с момента, когда вы захотите. После этого легко конвертировать секунды в день.

Если вы усекаете seconds/86400 , вы получите несколько дней.

Предположим, вы хотите дней с 1 января 2010 года.

 // current date/time NSDate *now = [[NSData alloc] init]; // seconds elapsed since January 1st 2010 00:00:00 (GMT -4) until now NSInteval interval = [now timeIntervalSinceDate: [NSDate dateWithString:@"2010-01-01 00:00:00 -0400"]]; // days since January 1st 2010 00:00:00 (GMT -4) until now int days = (int)interval/86400; 
  • Декларация о свойствах и автоматическое резервирование хранилища
  • Метод sizeWithFont устарел. boundingRectWithSize возвращает неожиданное значение
  • Получение списка файлов в каталоге с глобусом
  • iPhone - Что такое reuseIdentifiers (UITableViewCell)?
  • Запустите NSRunLoop в командной строке программы Cocoa
  • Как я могу добавить объекты CGPoint в NSArray простым способом?
  • Проверить версию iOS во время выполнения?
  • Что именно делает делегат в проекте xcode ios?
  • Ошибка: протокол недоступен, сброс backtrace
  • Полужирный и нежирный текст в одном UILabel?
  • Как использовать UIPanGestureRecognizer для перемещения объекта? iPhone / IPad
  • Давайте будем гением компьютера.