NSDateformatter setDateFormat в соответствии с currentLocale

Я схожу с ума, наверное, глупая проблема.

У меня есть 3 строки: год, месяц и день. Мне нужно иметь дату в правильном формате на основе currentLocale, то есть, если currentLocale localeIdentifier имеет значение en_US, мой формат даты должен быть: MMM/dd/yyyy

если это fr_FR, формат даты должен быть дд/МММ/гггг

Я не думаю, что единственный способ сделать это — получить currentLocale localeIdentifier и начать с нескольких if then.

Заранее спасибо.

Максимум


person masgar    schedule 09.05.2011    source источник


Ответы (6)


Посмотрите на NSDateComponents, чтобы создать NSDate, а затем используйте NSDateFormatter для его форматирования. NSDateFormatter использует текущую локаль для форматирования дат на основе стиля форматирования (например,
NSDateFormatterMediumStyle).

person Terry Wilcox    schedule 09.05.2011
comment
Спасибо много. NSDateComponents помог. - person masgar; 09.05.2011

Насколько я понимаю ваш вопрос, вы хотите установить NSDateFormatter в соответствии с локалью устройства пользователя. Для этого вы можете просто сделать что-то вроде этого:

NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
[dateFormatter setLocale:[NSLocale currentLocale]];
NSDate *date = [NSDate date];
NSString *dateString = [dateFormatter stringFromDate:date];
person edc1591    schedule 09.05.2011

В Свифт 3:

let formatter = DateFormatter()
formatter.dateStyle = .medium
formatter.timeStyle = .none
formatter.locale = Locale.current
let date = Date()
let dateString = formatter.string(from: date)
print(dateString)
person seb    schedule 28.07.2015

-(NSString *) stringFromDate:(NSDate *) date{

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];

    [dateFormatter setLocale:[NSLocale currentLocale]];

    NSString *dateString = [dateFormatter stringFromDate:date];

    [dateFormatter release];

    return dateString;
}

-(NSDate *) dateFromString:(NSString *) dateInString{

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];

    [dateFormatter setLocale:[NSLocale currentLocale]];

    NSDate *dateFromString = [dateFormatter dateFromString:dateInString];

    [dateFormatter release];

    return dateFromString;
}

Надеюсь, это поможет.

person Community    schedule 09.05.2011

перейдите по этой ссылке, чтобы понять, как NSDateFormatter основано на http://www.codingexplorer.com/swiftly-getting-human-readable-date-nsdateformatter/

person Nghia Luong    schedule 23.09.2016

Если вы хотите иметь больше гибкости в отношении формата, чем форматы, используемые с setDateStyle, посмотрите мой ответ на аналогичный вопрос: https://stackoverflow.com/a/20219610/1896336

person Joss    schedule 26.11.2013