Objective-C: как создать NSDate из полей дат по юлианскому календарю

Я создал категорию, чтобы помочь мне с созданием дат из полей года, месяца, дня. Теперь мне также нужно создать дату из юлианской даты (YYJJJ). Я проанализировал свою строку даты по юлианскому календарю и теперь

int years  // representing the year parsed from the julian date string
int days  // representing the day of the year parsed from julian date string

вот моя NSDateCategory:

    #import "NSDateCategory.h"


    @implementation NSDate (MBDateCat)

    + (NSDate *)dateWithYear:(NSInteger)year month:(NSInteger)month day:(NSInteger)day {
        NSCalendar *calendar = [NSCalendar currentCalendar];
        NSDateComponents *components = [[[NSDateComponents alloc] init] autorelease];
        [components setYear:year];
        [components setMonth:month];
        [components setDay:day];
        return [calendar dateFromComponents:components];
    }
  @end

Как мне создать NSDate из этих полей?

Редактировать: Вот функциональность Java, которую я пытаюсь перевести на Objective-C.

// Julian Exp Date
                // (YYJJJ)
                Date dt = new Date();
                Calendar cal = Calendar.getInstance();
                cal.setTime(dt);
                int years = new Integer(mid(data, 0, 2)).intValue();
                int days = new Integer(mid(data, 2, 3)).intValue();

                int year = ((cal.get(Calendar.YEAR) / 20) * 20) + years;
                int month = 0;
                int day = 0;
                cal.set(year, month, day);
                cal.add(Calendar.DAY_OF_YEAR, days);
                myData.setDate(cal);

person tia    schedule 28.12.2010    source источник
comment
tia, только потому, что вы конвертируете метод Java, вам не нужно преобразовывать его в мою строку в obj-C. Ответ, написанный Паскалем, будет работать.   -  person Black Frog    schedule 03.01.2011


Ответы (1)


Используйте NSDateFormatter, учитывая правильную строку формата, она достигает того, что вы хотите:

NSString *dateString = @"10123";      // 123. day of 2010
NSDateFormatter *fmt = [[NSDateFormatter alloc] init];
[fmt setDateFormat:@"yyDDD"];
NSDate *aDate = [fmt dateFromString:dateString];
[fmt release];
NSLog(@"Date: %@", aDate);

Это возвращает:

Date: 2010-05-03 00:00:00 +0200
person Pascal    schedule 28.12.2010
comment
Я не думаю, что это правильно переведет значение года. Посмотрите пример java-кода, который я добавил к своему вопросу - он использует математический трюк int для определения года. - person tia; 29.12.2010
comment
Смотрите мой обновленный пример. Это работает для меня, но я не привык к юлианским годам, может быть, это действительно не для вас. - person Pascal; 29.12.2010
comment
наконец добрался до модульных тестов, выполняющих этот код, и он действительно правильно анализирует дату. Благодарю. - person tia; 03.01.2011