Формат даты и времени после текущих настроек региона устройства - PullRequest
7 голосов
/ 30 октября 2011

У меня есть объект NSDate, из которого я делаю две строки NSString: дату и время. В настоящее время я форматирую дату как 20111031, а время как 23: 15.

Я хотел бы отформатировать его в соответствии с текущими настройками региона устройства (iPhone, iPad, iPod Touch) (не языком!). Так, например:

  • Устройство, настроенное на регион US, показывало бы (с макушки головы) 10.31.11 и время 23:15
  • Устройство, установленное для региона, который будет отображаться в Нидерландах: 31-10-2011 и время 23.15
  • Устройство, настроенное на шведский регион, будет показывать: 2001-10-31 и время 23: 15

Как я могу это сделать?

Ответы [ 2 ]

37 голосов
/ 30 октября 2011

Следующего должно быть достаточно, потому что NSDateFormatter по умолчанию имеет локаль телефона:

NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
NSLog(@"%@",[dateFormatter stringFromDate:date]);

К вашему сведению, что происходит с США, Нидерландами и Швецией:

[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// displays 10/30/11 7:09 PM 
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"nl_NL"]];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// displays 30-10-11 19:09
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"sv_SE"]];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
// displays 2011-10-30 19:09
7 голосов
/ 17 июля 2013

Здесь много отличных фрагментов кода. На мой взгляд, еще лучше для международных форматов даты (когда все, что мне нужно, это дата, а не время), так как телефон знает язык локали в настройках:

NSDate *date = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:NSLocaleIdentifier]];
[dateFormatter setTimeStyle:NO];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
NSLog(@"%@",[dateFormatter stringFromDate:date]);
...