От строки с языком к дате на iphone SDK - PullRequest
1 голос
/ 02 декабря 2010

Я пытаюсь найти способ конвертировать строку в дату с заданным идентификатором локали.У меня есть например итальянская дата (locale: it_IT), которую я хочу преобразовать в действительный объект даты.

NSDate *GLDateWithString(NSString *string, NSString *localeIdentifier) {
    [NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier];
    [formatter setLocale:locale];
    [locale release];

    NSDate *date = [formatter dateFromString:string];
    [formatter release];

    return date;
}

этот код не работает, дата равна нулюЯ не могу понять, как мне использовать настройки локали для своих целей.

Ответы [ 2 ]

1 голос
/ 03 декабря 2010

Решение состоит в том, чтобы использовать getObjectValue: forString: range: error: метод NSDateFormatter и установить правильную дату и время в стиле объявления следующим образом:

- (NSDate *)dateWithString:(NSString *)string locale:(NSString *)localeIdentifier {
    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setTimeStyle:NSDateFormatterNoStyle];
    [formatter setDateStyle:NSDateFormatterShortStyle];

    NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:localeIdentifier];
    [formatter setLocale:locale];
    [locale release];

    NSDate *date = nil;
    NSRange range = NSMakeRange(0, [string length]);
    NSError *error = nil;
    BOOL converted = NO;
    converted = [formatter getObjectValue:&date forString:string range:&range error:&error];
    [formatter release];

    return converted? date : nil;
}

пример:

NSString *italianDate = @"30/10/2010";
NSString *italianLocale = @"it_IT";

NSDate *date = [myCustomFormatter dateWithString:italianDate locale:italianLocale];
0 голосов
/ 02 декабря 2010

Я тоже некоторое время назад боролся с немецкими форматами и решил проблему, предоставив свою собственную строку форматирования:

[formatter setDateFormat:@"dd.MMM.yyyy HH:mm:ss"];

Тогда:

[dateFormatter dateFromString:@"01.Dez.2010 15:03:00"];

получит правильную NSDate.

...