Как сделать nsdateformatter отображать конкретную дату локали?

Я использую 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 ответов


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

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

вот так:

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

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


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


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

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

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

NSString *formattedDate = FormatDate([NSDate new]);