Как вы вычисляете день года на определенную дату в 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; 
  • Только два закругленных угла?
  • Использование MPMediaItems с AVAudioPlayer
  • Вам нужно создать NSAutoreleasePool в блоке в GCD?
  • Эквивалент карты NSArray
  • Нажмите ViewController справа налево с помощью UINavigationController
  • Звук не работает в iPhone Simulator?
  • Как отобразить изображение base64 в UIImageView?
  • Можем ли мы пригласить людей использовать наше приложение или отправить запрос друга из приложения через Facebook в iOS 5?
  • Выполнение команд оболочки с помощью NSTask - Objective-C Cocoa
  • Преимущества, проблемы, примеры добавления другого UIWindow в приложение iOS?
  • Можете ли вы настраивать анимацию для встраиваемых ячеек UITableView?
  • Давайте будем гением компьютера.