2012-06-14 3 views
1

Можно создать дубликат:
How do you calculate the day of the year for a specific date in Objective CiOS Как получить номер дня в году?

Мне нужно, чтобы получить номер дня в году и не знаю, что было бы лучшим Подход.

Пример:

21-января-2012 -> 21

2-февралем-2012 -> 33

2-Mar-2012 -> 62

2-Mar- 2011 -> 61

Любые идеи?

Благодаря

+2

Почему downvotes? Это правильный вопрос к обоснованной логической необходимости? – davidethell

ответ

-1

Посмотрите на NSTimeInterval. Вы можете получить секунды, прошедшие между двумя датами:

NSTimeInterval secondsElapsed = [secondDate timeIntervalSinceDate:firstDate]; 

Таким образом, ваш firstDate может быть в начале года. Затем вы можете просто делить на 3600 * 24 (секунды в день), чтобы получить дни.

+0

На самом деле это неверно. Я новичок в этой теме, но использование NSCalendar (или NSDateFormatter) было бы более безопасным: http://infiniteundo.com/post/25326999628/falsehoods-programmers- вера-время- –

+0

[docs] (https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/DatesAndTimes/Articles/dtCalendars.html#//apple_ref/doc/uid/TP40003470-SW7) также охватывают это: «Если вы хотите узнать, какой номер дня в году вы можете использовать метод ordinalityOfUnit: inUnit: forDate: класса NSCalendar». –

-3

Сначала создается Dictionnary как:

[Jan => 30, 
Feb => 28, 
...] 

Со всеми дней в месяц.

  • Во-вторых с Вашей датой, как: 13 июня 2012
  • Вы добавите все значения месяца до июня (некоторое время на вашем dictionnary).
  • И закончите, добавьте день (здесь: 13).
+0

как насчет високосных лет?это не очень хорошая практика. – Jasper

-1

Заканчивать решение ниже Вы должны использовать timeIntervalSinceDate: для этого

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init] ; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd"]; 

    NSDate *date1 = [dateFormatter dateFromString:@"2012-01-01"]; 
    NSDate *date2 = [NSDate date]; 
    NSLog(@"date %@ ", date2); 

    NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"yyyy-MM-dd"]; 

    NSDateFormatter *timeFormat = [[NSDateFormatter alloc] init]; 
    [timeFormat setDateFormat:@"HH:mm:ss"]; 

    NSDate *now = [[NSDate alloc] init]; 

    NSString *theDate = [dateFormat stringFromDate:now]; 
    NSDate *dt = [dateFormat dateFromString:theDate]; 


    NSTimeInterval diffDays = [dt timeIntervalSinceDate:date1]; 
    NSLog(@"Date %f ^^^^ ", diffDays/(24*60*60)); 
20

Я немного опоздал на вечеринку, но в любом случае, здесь идет:

NSDate *today = [NSDate date]; 
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"DDD"]; 
NSInteger dayInYear = [[dateFormat stringFromDate:today] integerValue]; 
NSLog(@"today is %d. day in year", dayInYear); 

результат для 14.jun.2012: сегодня 166. день в году

EDIT: я был поражен тем, что ther В Google не было простого примера.

Вы также можете использовать формат @"DD", чтобы получить день в месяце или @"D", чтобы получить день в неделю.

EDIT2: Просто примечание: создание NSDateFormatter может быть довольно дорогим операция. Если ваш класс часто использует эту функцию, вам может понадобиться создать статический форматировщик ivar.

+1

+1 для использования NSDateFormatter для решения проблемы. Мне нравится иметь два способа сделать что-то. – davidethell

+0

Спасибо! +1 назад у вас :) Я согласен, больше способов сделать что-то, конечно, весело. –