Как заставить NSDateFormatter отображать специфичную для локали дату? - PullRequest
13 голосов
/ 28 августа 2009

Я использую NSDateFormatter, чтобы установить дату в своем приложении для iPhone, и даты отображаются правильно. Тем не менее, я обнаружил, что все локали (мое приложение поддерживает до 12 различных языков) придерживаются формата даты, который я определяю через setDateFormat. В идеале я хочу, чтобы формат даты отображался в форме, естественной для настройки региона для пользователя, вместо того, чтобы следовать моему формату (который хорошо работает для английского языка, но может не быть естественным для других языков).

Ниже мой код:

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle];
    [dateFormatter setDateFormat:@"MMMM dd, yyyy kk:mm:ss"];

    self.creationDate.text = [dateFormatter stringFromDate:creationTimeStamp];

Ответы [ 3 ]

32 голосов
/ 28 августа 2009

Я бы попробовал следующий NSDateFormatter API вместо:

+ (NSString *)localizedStringFromDate:(NSDate *)date
              dateStyle:(NSDateFormatterStyle)dateStyle
              timeStyle:(NSDateFormatterStyle)timeStyle;

Вот так:

self.creationDate.text = [NSDateFormatter localizedStringFromDate:creationTimeStamp
                                          dateStyle:NSDateFormatterMediumStyle
                                          timeStyle:NSDateFormatterShortStyle];

Это должно дать вам искомый вывод, немного привести в порядок код и избавить вас от необходимости управлять какой-либо ложной памятью.

12 голосов
/ 28 августа 2009

Нашел решение. Ключ в том, чтобы вообще не вызывать setDateFormat, и API в iPhone автоматически выберет подходящую вещь для отображения на основе того, что указано в setDateStyle и setTimeStyle.

0 голосов
/ 23 октября 2014

Автономное решение с дизайном @ fbrereto:

static NSString *FormatDate(NSDate *date)
{
  return [NSDateFormatter localizedStringFromDate:date
                                        dateStyle:NSDateFormatterMediumStyle
                                        timeStyle:NSDateFormatterNoStyle];
}

Теперь вы можете просто запустить:

NSString *formattedDate = FormatDate([NSDate new]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...