2012-03-12 2 views
13

У меня есть этот код, где я пытаюсь получить текущую дату и отформатировать ее в текущей локали.Как отформатировать текущую дату для локали пользователя?

NSDate *now = [NSDate date]; // gets current date 
NSString *sNow = [[NSString alloc] initWithFormat:@"%@",now]; 
NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"mm-dd-yyyy"]; 
insertCmd = [insertCmd stringByAppendingString: formatter setDateFormat: @"MM.dd.yyyy"]; 

Я знаю, что последняя строка не так, но не могу понять это ... «insertCmd» является NSString, что я строю для команды FMDB.

Помощь будет принята с благодарностью или указатель на «документ», где описано.

ответ

29

В этом случае я бы не использовал setDateFormat, так как он ограничивает формат даты до определенного формата даты (doh!) - вам нужен динамический формат в зависимости от локали пользователя.

NSDateFormatter предоставляет набор встроенных даты/времени стилей, которые вы можете выбрать из, т.е. NSDateFormatterMediumStyle, NSDateFormatterShortStyle и так далее.

Так что вы должны сделать, это:

NSDate* now = [NSDate date]; 
NSDateFormatter* df = [[NSDateFormatter alloc] init]; 
[df setDateStyle:NSDateFormatterMediumStyle]; 
[df setTimeStyle:NSDateFormatterShortStyle]; 
NSString* myString = [df stringFromDate:now]; 

Это предоставит вам строку с датой средней длины и времени короткометражный, все в зависимости от локали пользователя. Поэкспериментируйте с настройками и выберите то, что вам нравится.

Вот список доступных стилей: https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSDateFormatter_Class/Reference/Reference.html#//apple_ref/c/tdef/NSDateFormatterStyle

3

Если вы хотите локализованную дату и время это даст его вам:

NSString *localizedDateTime = [NSDateFormatter localizedStringFromDate:[NSDate date] dateStyle:NSDateFormatterShortStyle timeStyle:NSDateFormatterShortStyle]; 

Код выше не дает вам локализованное дату и время ,

5

В дополнение к jiayow ответ вы можете указать свой собственный 'шаблон', чтобы получить локализованную версию:

+ (NSString *)formattedDate:(NSDate *)date usingTemplate:(NSString *)template { 
    NSDateFormatter* formatter = [NSDateFormatter new]; 

    formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:template options:0 locale:formatter.locale]; 

    return [formatter stringFromDate:date]; 
} 

Пример использования для США/DE локали:

NSLocale *enLocale = [NSLocale localeWithLocaleIdentifier:@"en_US"]; 
NSLocale *deLocale = [NSLocale localeWithLocaleIdentifier:@"de"]; 

// en_US: MMM dd, yyyy 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"ddMMMyyyy" options:0 locale:enLocale]; 
// de:  dd. MMM yyyy 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"ddMMMyyyy" options:0 locale:deLocale]; 

// en_US: MM/dd/yyyy 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"ddyyyyMM" options:0 locale:enLocale]; 
// de:  dd.MM.yyyy 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"ddyyyyMM" options:0 locale:deLocale]; 

// en_US MM/dd 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"MMdd" options:0 locale:enLocale]; 
// de:  dd.MM. 
formatter.dateFormat = [NSDateFormatter dateFormatFromTemplate:@"MMdd" options:0 locale:deLocale]; 
Смежные вопросы